# String splitten + Zählen



## Zer0Puma (21. April 2009)

Hey Leute, habe momentan nen riesiges Problem. Wir sollen in Java nen Programm schreiben, welches einen Satz oder Buchstabenfolge (in einem String) so splittet, dass man die einzelnen Buchstaben hat. Diese sollen dann gezählt werden und mit Hilfe des Huffmann Codes in einen Baum eingetragen werden. Allerdings sitz ich jetzt hier schon seit 3 Wochen und habe keine Ahnung, wie ich das anstellen soll. Google spuckt auch nichts aus, was mir helfen würde. 
Bräuchte da echt jemanden, der mir da Hilft.

MfG Zer0Puma


----------



## MiMi (21. April 2009)

Zer0Puma hat gesagt.:


> Google spuckt auch nichts aus, was mir helfen würde.


Naja vieleicht solltest du mal google richtig nutzen.  ^^

Den Anfang geb ich dir mal

http://www.administrator.de/index.php?content=57761 (gefunden durch "java string buchstabe")

Wenn du dann net weiter kommst, zeig deinen Code und wo du festhaengst. Hier werden naemlich keine Hausaufgaben gemacht ^^


----------



## Zer0Puma (21. April 2009)

Öhm ja... wenn ich mir den Code so anschaue, muss ich sagen, dass ich die meisten der Befehle garnicht kenne... Ist Info GK, wobei ich das erste Jahr Java mit den Grundfunktionen nicht da war, weil ich erst später auf die Schule gewechselt bin. 

Ähm wenn ich das dann richtig Verstanden habe, dann führt der Befehl wort.charAt(i) dazu, dass der Buchstabe an der Position i in das Array eingetragen wird richtig? 

Und was bedeutet "Char" im Array? Haben das noch nie benutzt!

MfG Zer0Puma


----------



## Dragosani (21. April 2009)

Für das Aufteilen in ein Array könntest Du Dir mal die split() Methode ansehen.

Ich würde Dir allerdings raten, vor dem Huffmann-Code noch die Grundlagen von Java zu büffeln.


----------



## Zer0Puma (21. April 2009)

Ay, dass ist ja das Problem daran. Ich bin momentan dabei, das ganze aufzuarbeiten, allerdings nimmt mein Lehrer darauf weniger Rücksicht, da die anderen schon viel weiter sind  Jetzt will er mir ne miese Note reindrücken, wenn ich das nicht schaffe, deswegen frage ich ja hier um Hilfe, damit ich da vielleicht noch ne 3 oder so bekomme.

Naja, danke erstmal für die Hilfe, werde mir jetzt erstmal durchlesen, was die einzelnen Methoden machen. 

MfG Zer0Puma


----------



## zeja (22. April 2009)

Lehrer... Beruf verfehlt irgendwie. 

Es gibt ein paar Online-Bücher. Da kannst du dich erstmal ein wenig reinlesen:
http://openbook.galileocomputing.de/javainsel8/

Und dann gibts natürlich noch die Java-Dokumentation wo alle Klassen und Methoden erklärt sind:
http://java.sun.com/javase/6/docs/api/index.html


----------



## MiMi (22. April 2009)

Dragosani hat gesagt.:


> Für das Aufteilen in ein Array könntest Du Dir mal die split() Methode ansehen.
> 
> Ich würde Dir allerdings raten, vor dem Huffmann-Code noch die Grundlagen von Java zu büffeln.



Ich hatte die Split methode net genannt, weil ich dachte man kann damit nur nach bestimmten Zeichen trennen?


----------



## Dragosani (22. April 2009)

MiMi hat gesagt.:


> Ich hatte die Split methode net genannt, weil ich dachte man kann damit nur nach bestimmten Zeichen trennen?



Stimmt ja auch, ein Leerstring ist allerdings auch erlaubt 



Zer0Puma hat gesagt.:


> Ay, dass ist ja das Problem daran. Ich bin momentan dabei, das ganze aufzuarbeiten, allerdings nimmt mein Lehrer darauf weniger Rücksicht, da die anderen schon viel weiter sind  Jetzt will er mir ne miese Note reindrücken, wenn ich das nicht schaffe, deswegen frage ich ja hier um Hilfe, damit ich da vielleicht noch ne 3 oder so bekomme.
> 
> Naja, danke erstmal für die Hilfe, werde mir jetzt erstmal durchlesen, was die einzelnen Methoden machen.
> 
> MfG Zer0Puma



Hm, blöde Situation. Versuche Dich doch mal an dem Code und wenn Du garnicht weiter kommst, dann poste, was Du bisher hast. Dir wird dann ganz sicher geholfen.


----------



## Billie (22. April 2009)

String.toCharArray


----------



## Zer0Puma (22. April 2009)

So, habe jetzt mit ein wenig Hilfe von nem Freund von mir (und der Internetseite von Mimi) nen Code zusammen gebaut. Eigentlich sollte es theoretisch funktionieren, wenn ich aber dann system.out.println(array[1]); noch in die Main methode packe, dann kommt nen Error... 


```
public class Splitten 
{
	public static void main(String[] args)
	{
		String wort="abc";
		char[] array = new char[wort.length()];
		for (int i=0; i<=wort.length(); i++)
		{
			array[i] = wort.charAt(i);
		}
	}
}
```

Mit der Ausgabe wollte ich halt überprüfen, ob das Array jetzt entstanden ist, so wie es sein sollte, oder ob es fehlerhaft ist. Jetzt ist meine Frage, ob mein Code falsch ist oder ob ich einfach nen Fehler beim Ausgabebefehl gemacht habe.

MfG Zer0Puma


----------



## MiMi (23. April 2009)

Was jetzt da noch dein Freund grossartig gemacht hat naja KA, ist ja eigentlich das gleiche wie auf der Seite. 
Aber die Fehlermeldung zu wissen ware gut gewesen ^^
Wenn du 

```
system.out.println(array[1]);
```
machst, kommt wohl nen Fehler, weil das Array ja net unbedingt an Position 1 was stehen hat. Oder wenn es wirklich so steht wie du geschrieben hast, weil du "system" klein geschrieben hast ^^
Mach am besten in der For-Schleife das mit

```
System.out.println(array[i]);
```


----------



## Billie (23. April 2009)

Warum nicht einfach wie folgt:


```
public class Splitten 
{
	public static void main(String[] args)
	{
		String wort="abc";
		char[] array = wort.toCharArray();
	}
}
```


----------



## MiMi (23. April 2009)

Klar ist auf jeden Fall kuerzer und wohl auch effektiver. 
Aber es gibt  viele Methoden und Wege ^^


----------



## Zer0Puma (23. April 2009)

Billie hat gesagt.:


> Warum nicht einfach wie folgt:
> 
> 
> ```
> ...



Muss da nicht noch die Arraylänge angegeben werden?

Ach ja, den Fehler habe ich gefunden, in meiner Methode musste es heißen i=0; i<wort.length(). So, jetzt hab ich wenigstens ne Grundlage, hoffe meinem Lehrer wird es gefallen


----------



## Billie (23. April 2009)

Nein, toCharArray ist eine Methode vom Objekt String und das Objekt kennt seine Länge selbst - sie muss also nicht explizit übergeben werden.

Hier ein Auszug vom Java-Source der Klasse String:


```
/** The count is the number of characters in the String. */
    private final int count;

    /**
     * Returns the length of this string.
     * The length is equal to the number of 16-bit
     * Unicode characters in the string.
     *
     * @return  the length of the sequence of characters represented by this
     *          object.
     */
    public int length() {
        return count;
    }

    /**
     * Converts this string to a new character array.
     *
     * @return  a newly allocated character array whose length is the length
     *          of this string and whose contents are initialized to contain
     *          the character sequence represented by this string.
     */
    public char[] toCharArray() {
	char result[] = new char[count];
	getChars(0, count, result, 0);
	return result;
    }
```


----------



## Zer0Puma (23. April 2009)

So hab jetzt ja das Grundgerüst gehabt und hab das noch etwas ausgearbeitet. Jetzt werden die Buchstaben gezählt und in ein neues Array mit absoluter Häufigkeit gepackt. Hab das jetzt einfach mal provisorisch gemacht gibts da noch Verbesserungsvorschläge


```
public class Splitten 
{
	int buchstaben[]=new int[26];
	
	public static void main(String[] args)
	{
		new Splitten();
	
	}
	
	public Splitten()
	{
		for(int i=0;i<26;i++)
		{
			buchstaben[i]=0;
		}
			
		String wort="Das ist ja toll";
		wort=wort.toUpperCase();
		for (int i=0; i<wort.length(); i++)
		{
		    char buchstabe=wort.charAt(i);
		    int ascii=(int)buchstabe-65;
		    if(ascii>=0 && ascii<26)
		    buchstaben[ascii]++;
			
		}
		
		for(int i=0;i<26;i++)
		{
			System.out.println("Buchstabe:"+(char)(i+65)+" :"+buchstaben[i]);
		}
	}
}
```


----------



## MiMi (23. April 2009)

Statt in den for schleifen die 26 zu schreiben koenntest du Buchstaben.length machen.
Und du koenntest natuerlich das mit dem toCharArray() umsetzen.


----------



## Zer0Puma (23. April 2009)

MiMi hat gesagt.:


> Statt in den for schleifen die 26 zu schreiben koenntest du Buchstaben.length machen.
> Und du koenntest natuerlich das mit dem toCharArray() umsetzen.



Das Array hat aber eine feste Länge von 26, da das Alphabet 26 Buchstaben hat. Für jeden Buchstaben also einen Platz...

Und mit dem toCharArray() brauche ich ja eigentlich nicht, da - wenn ich das richtig verstanden habe - jeder String schon ein Array ist. Das benutze ich jetzt ja... 

MfG Zer0Puma


----------

