# String filtern



## Java-DAU (7. Dez 2012)

Hey ihr süßen,

ich hab einen langen text im String, sieht so aus:

public class StringsDing {

	public static void main(String[] args) {

String text = "sehr sehr langer text......"


Die Aufgabe ist es diesen Text zu filtern und alle Zahlen und Wörter, die nur aus einem Buchstaben bestehen rauszuwerfen.

Die Zahlen hab ich bereits mir "replace" rausgeworfen aber wie zur Hölle mach ich das mit den Wörtern < 2 Zeichen???? :bahnhof:


----------



## D4rkscr43m (7. Dez 2012)

```
\s.\s
```



Spoiler: Stichwort gefällig?



Regex


----------



## TryToHelp (7. Dez 2012)

Teile deinen Text in Wörter, üblicher weiße macht mann das an den Leerzeichen, dafür gibt es den split Befehl der String Klasse. Das Resultat ist dann ein Array von Strings. Durch dieses kannst du dann mittels einer Schleife durch gehen und schaust dir dann von jedem Arrayobjekt (dem String) die Länge an und mittels if-Abfrage schaust du ob diese kürzer als 2 ist ;-)


----------



## Java-DAU (7. Dez 2012)

Ja soweit war ich schon 

String[] splitArray = text.split("(\\s|\\p{Punct})+");
		for (int i = 0; i < splitArray.length; i++)
		System.out.println(splitArray_);


Jetzt gings darum die einzelnen Buchstaben rauszukicken..... Ich werde dann mal schaun das ich eine brauchbare Schleife und if-Abfrage hinbekomme _


----------



## TryToHelp (7. Dez 2012)

Schau dir mal den befehl an String (Java 2 Platform SE v1.4.2)
Deine schleife kanns du so lassen wie du willst und anstelle der Syso machst du dann dein if (generell würde ich schleifen und ifs immer mit geschweiften Klammern machen)
also so in der Art 

```
for (int i = 0; i < splitArray.length; i++){
  if(splitArray[i].length()<2){
    // das wort ist nur ein Buchstabe
    System.out.println("nur ein Buchstabe "+splitArray[i]);
  }else{
    System.out.println("mehr als ein Buchstabe "+splitArray[i]);
  }
}
```
Und für Java-Code das Java-Tag nehmen


----------



## Java-DAU (7. Dez 2012)

ok, danke! aber bei dieser lösung wird das zeichen nur markiert und nicht gelöscht.... wie kann ich das nun komplett raus bekommen aus meinem string oder zumindest dafür sorgen das es nicht betrachtet wird???

die Folgeaufgaben beziehen sich auf einen Text mit Wörtern mit der Mindestlänge 2+


----------



## Niggel595 (7. Dez 2012)

```
String ergebnis = "";
for (String s: splitArray){
    if(s.length() < 2){
        ergebnis += s;
    }
}
```

Bitte sehr^^


----------



## D4rkscr43m (7. Dez 2012)

Niggel595, da fehlen dann aber alle Leerzeichen.


----------



## Pentalon (7. Dez 2012)

Na die Leerzeichen werden jetzt wohl nicht das Problem sein 
Das liesse sich mit einer kleinen Erweiterung leicht lösen:

```
ergebnis = ergebnis +s+" ";
```

Das letzte Leerzeichen könnte man sich dann sparen, das macht man mit einer if Anweisung.

Pentalon


----------



## faetzminator (7. Dez 2012)

```
str = str.replaceAll("(?:\\W)\\w(?:\\W)", "");
```
 ?
Beachten müsste man noch folgende Punkte:
- funktioniert es auch bei einzelnem Zeichen am Anfang/Ende des Strings?
- will man noch die Leerzeichen löschen? Da müsste man natürlich Punkte o.ä. nicht löschen


----------



## bone2 (7. Dez 2012)

Niggel595 hat gesagt.:


> ```
> String ergebnis = "";
> for (String s: splitArray){
> if(s.length() < 2){
> ...



das sollte wohl >=2 werden und nen Stringbuilder statt String


----------



## Java-DAU (7. Dez 2012)

mein Text besteht aus etwa 500 worten, jedes dieser Worte steht nun in meinem Array. Ich soll das ganze alphabetisch sortieren lassen und zwar mit bubblesort. Hm Arrays.sort kann das auch, aber wäre ja viel zu einfach :/

Kann jemand helfen????


----------



## Pentalon (7. Dez 2012)

Bubble Sort.....

Der wurde in diesem Forum schon öfter behandelt.
Einfach mal suchen, würde ich vorschlagen.

Auch die Wikipedia hält zu diesem Thema einiges bereit.

Vom Prinzip her wird das Array mit einer Schleife durchlaufen und feld[x] mit feld[x+1] verglichen.
Ist feld[x] grösser als feld[x+1] werden die beiden ausgetauscht. Dieser Vorgang findet so lange statt, bis es nichts mehr zu tauschen gibt.
Das ist der BubbleSort.

Sehr einfach, wenn man die Kontrollstrukturen richtig anwendet.

Pentalon


----------



## Java-DAU (8. Dez 2012)

Danke. Ich weiß wie BubbleSort funktioniert, habe damit auch schon Zahlen sortiert. Mir ist nur nicht klar wie ich damit Buchstaben sortieren soll. Höchstens ich weise jedem Buchstaben vorher einen Wert zu, aber ich weiß nicht ob das vllt zu umständlich ist?!


----------



## Pentalon (8. Dez 2012)

Ganz einfach, Du machst Dir eine Vergleichsmethode, die Dir sagt, welcher der beiden übergebenen Strings grösser ist.
Einem Buchstaben brauchst Du ausserdem keinen Wert zuweisen, denn er hat bereits einen Wert.

Hier ein kleiner Denkanstoss:

```
public static void main(String[] args) 
    {        
    	char a = 'a';
    	char b = 'b';
    
        if (a < b) System.out.println("A ist kleiner als B");
        else System.out.println("B ist kleiner als A");
    }
```

PS: eigendlich wäre das ja eine andere Frage, der man einen eigenen Thread spendieren sollte.

Pentalon


----------



## faetzminator (8. Dez 2012)

Siehe auch die ASCII-Tabelle: Ascii Table - ASCII character codes and html, octal, hex and decimal chart conversion
Wenn kein Unterschied von Gross- und Kleinbuchstaben gemacht werden soll, einfach Vergleich mit [c]toLowerCase()[/c] implementieren.


----------



## Java-DAU (8. Dez 2012)

ne ich soll einfach etwa 600 Worte (unabhängig von groß- und kleinschreibung) nach dem Alphabet sortieren..... ABER wir dürfen nur das bisher gelernte nutzen. Letzte Stunde haben wir BubbleSort gelernt, daher auch mein kläglicher Versuch es irgendwie mit bubbleSort umzusetzen....


----------



## pro2 (8. Dez 2012)

Wie oben steht, du musst im Prinzip dir die String-Anfänge als char holen und dann kannst du sie so vergleichen, als wären es Zahlen. 


```
char character1 = Character.toLowerCase(array[i].charAt(0));
char character2 = Character.toLowerCase(array[i + 1].charAt(0));
```

So könnte das etwa im Code später aussehen. Weiß nicht, ob ihr nur nach dem ersten Buchstaben oder auch nach weiteren sortieren müsst, dann würde es noch mal etwas komplizierter. Aber mit dem Tricks dürftest du es eig. hinbekommen, wenn es auch mit Zahlen geklappt hat!


----------



## Pentalon (9. Dez 2012)

Ob das ausreicht ?

Wenn Du ein Array hast in dem z.B. die folgenden Strings stehen:

Abend, Zelt, Badewanne, Atom, Zimt, Berg, Haus, Hexe

und die Sortierung dann so aussieht:

Atom
Abend
Berg
Badewanne
Hexe
Haus
Zimt
Zelt

würde ich das als nicht ausreichend empfinden.
Natürlich ist das jetzt bewusst falsch hingeschrieben und so manche Anordnung wird wohl richtig sein, dass ist dann aber reiner Zufall und darauf würde ich micht nicht verlassen.

Pentalon


----------



## Java-DAU (9. Dez 2012)

ihr macht mich fertig jungs^^


----------



## Pentalon (9. Dez 2012)

Ja, dafür sind die Jungs ja da 

Spass beiseite, hast Du die Sortierung schon gemacht ? bzw, was sagt der Lehrer, ist es ausreichend, nach dem ersten Buchstaben zu sortieren ?

Pentalon


----------



## Java-DAU (9. Dez 2012)

ne, habs irgendwann aufgegeben :/ kann mir nicht vorstellen das das sooooo kompliziert gehen soll wie ich mir das in meinem kopf vorstelle :-(

Der Arbeitsauftrag war dieses Array alphabetisch, also lexikographisch zu sortieren. Genau wie im Duden ist Groß- und Kleinschreibung dabei zu ignorieren......


----------



## Pentalon (9. Dez 2012)

Naja, es ist schon etwas knackig.
Aber wenn Du die Sortierung eh schon hast, bzw. nur von Zahlensortierung umstellen musst, ist nur noch eine gute Routine zu machen, die 2 Strings vergleicht.

Du machst Dir als erstes 2 Char Felder in denen die beiden Strings zu Chars zerlegt werden.


```
char[] feldA = a.toCharArray();
char[] feldB = b.toCharArray();
```

Dann vergleichst Du die beiden in einer Schleife und gibts true oder false zurück.
Mit diesem Rückgabewert vertauscht Du dann die Strings oder eben nicht.

Das einzige worauf man aufpassen muss, ist, wenn man 2 Strings mit unterschiedlicher Länge prüft.
Man prüft nur die Anzahl des kürzeren Strings, wenn die alle gleich sind wie z.B. bei "aaaa" "aaaab" muss aaaa vor aaaab kommen, was ja auch logisch ist. Wenn man das ignoriert, kann es passieren, dass aaaab vor aaaa kommt.

Du bist also eigendlich schon fast fertig.
Wenn Du Hilfe brauchst, melde Dich einfach.

Pentalon


----------

