# String zerlegen in einzelne Strings



## JavaMaus1 (20. Jul 2011)

Hallo liebe Forum-ler,

ich habe folgenden String:

************************************************************************ ******* BenutzerID: 11221 Name: Testname, Testvorname Text1: Eingabe User Text1 Datum: Datumseingabe User Bemerkung: hier Kann der benutzer noch Infos eintragen Remotecomputer: 192.168.55.55 Benutzername: Domäne\ADSBenutzername

Die Eingabne werden über ein HTML-Formular gemacht & mir als EMail mit diesem String zugestellt. Dabei heißen die Feldbenennungen immer gleich. Nun hätte ich gerne, dass ich String bekomme die folgendermaßen aussehen:
s1 =  BenutzerID:
s2 = 11221
s3 = Name:
s4 = Testname, Testvorname
s5 = Text1:
s6 = Eingabe User Text1

usw...

hat da jm. eine Idee dazu? 

LG, JavaMaus1


----------



## Quaxli (20. Jul 2011)

Kannst Du da noch ein Feldtrennzeichen reinfrickeln, z. B. ein Semikolon?
Würde die Sache einfacher machen...

<edit>
Schau' Dir auf jeden Fall mal die Klasse StringTokenizer an.
</edit>


----------



## JavaMaus1 (20. Jul 2011)

Ne, leider nicht. Ich bekomm die Mail von extern & kann daram nichts verändern - außer halt eben mit Java? Habe mir die Klasse angeschaut - aber ne richtige Idee wurde noch nciht daraus.:autsch:


----------



## Andi_CH (20. Jul 2011)

Vielleicht gibt es etwas fertiges, aber bis ich das gefunden und verstanden hätte, hätte ich längst selbst einen kleinen Parser geschrieben, der nach den Schlüsselwörtern sucht und den Teil danach bis zum nächsten Schlüsselwort bzw. Stringende vorerst abspeichert und dann am Schluss den gwünschten Resultatstring (wenn es denn unbedingt ein String sein muss) zusammenbaut.
(Es gibt sicher optimalere Datenstrukturen um das Resultat zu speichern als ein String)

1. Schritt: Zerlegen des Strings in "Worte" (Resultat ist ein String[])
2. Iteriere durch das String[] Prüfe auf Schlüsselwort- iteriere weiter bis zum nächsten Schlüsselwort und baue fortlaufend die dazwischen zu einem Teilresultat zusammen.


Uff: Unsere Sekretariats-Praktikantin wollte unbedingt eine Statemachine implementieren - Tja - Code fertig und läuft. (Woher die das kann weiss sie selbst nicht ;-) )

Mach mal ein Angebot - sie meinte so einige Kaffee für das Sexretariat sei die Arbeit schon wert...


----------



## MarderFahrer (20. Jul 2011)

Also ich spiel ganz gerne mal mit String herum. Darum hab ich mir mal die Zeit genommen mit substring den String zu bearbeiten. Ich bin sicher man kann das ganze mit Arrays, Listen und Schleifen viel viel Eleganter lösen.

Der Code sollte sich kompilieren lassen, falls du das ganze mal nachvollziehen möchtest. Im Grunde arbeite ich mit der Annahme, dass diese "Schlüsselwörter" immer gleich und bekannt sind. Ich nehme den String, und arbeite mich von hinten durch. Suche nach dem letzten Schlüsselwort, speicher das ganze weg und erzeuge einen neuen String, der alles bis auf das gerade gefundene Schlüsselwort enthält.
Auf die Weise arbeitet man nach und nach den String ab und bekommt so seine Aufgeteilten Strings. Allerdings sind in diesen noch "<Schlüsselwort>: <Wert>" zusammen enthalten. Das müsste man dann nochmals trennen, was aber kein Problem sein sollte.


```
public class Problem {

	static String input = "BenutzerID: 11221 Name: Testname, Testvorname Text1: Eingabe User Text1 Datum: Datumseingabe User Bemerkung: hier Kann der benutzer noch Infos eintragen Remotecomputer: 192.168.55.55 Benutzername: Domäne\\ADSBenutzername";

	public static void main(String[] args) {
		System.out.println(input);
		System.out.println();
		
		String temp = input.substring(input.indexOf("Benutzername:"));
		System.out.println(temp);
		
		String input2 = input.substring(0, input.indexOf(temp));
		
		String temp2 = input2.substring(input2.indexOf("Remotecomputer:"));
		System.out.println(temp2);
		
		String input3 = input2.substring(0, input2.indexOf(temp2));
		
		String temp3 = input3.substring(input3.indexOf("User Bemerkung:"));
		System.out.println(temp3);
		
		String input4 = input3.substring(0, input3.indexOf(temp3));
		
		String temp4 = input4.substring(input4.indexOf("Datum:"));
		System.out.println(temp4);
		
		String input5 = input4.substring(0, input4.indexOf(temp4));
		
		String temp5 = input5.substring(input5.indexOf("Text1:"));
		System.out.println(temp5);
		
		String input6 = input5.substring(0, input5.indexOf(temp5));
		
		String temp6 = input6.substring(input6.indexOf("Name:"));
		System.out.println(temp6);
		
		String input7 = input6.substring(0, input6.indexOf(temp6));
		
		String temp7 = input7.substring(input7.indexOf("BenutzerID:"));
		System.out.println(temp7);
	}

}
```


----------



## eRaaaa (20. Jul 2011)

Ihr immer mit eurem StringTokenizer... :autsch:

Dann komme ich wieder mit Pattern und Matcher  

```
Matcher m = Pattern.compile("(BenutzerID:)(.+)(Name:)(.+)(Text1:)(.+)(Datum:)(.+)(User Bemerkung:)(.+)(Remotecomputer:)(.+)(Benutzername:)(.+)").matcher(input);
		if(m.find()){
			for (int i = 1; i <= m.groupCount(); i++) {
				System.out.print(m.group(i).trim()+" ");
				if(i%2==0)System.out.println();
			}
		}
```


----------



## Andi_CH (20. Jul 2011)

... hm sollte die Praktikantin auf die Idee kommen regexp lernen zu wollen schicke ich sie zu euch ...


----------



## MarderFahrer (20. Jul 2011)

Andi_CH hat gesagt.:


> ... hm sollte die Praktikantin auf die Idee kommen regexp lernen zu wollen schicke ich sie zu euch ...



Oder als Alternative, mein Vorschlag etwas verkleinert. 


```
String[] keys = {"Benutzername:","Remotecomputer:","User Bemerkung:","Datum:","Text1:","Name:","BenutzerID"};
		
		List<String> splitted = new ArrayList<String>();
		for(String key : keys){
			String tempInput = input.substring(input.indexOf(key));
			splitted.add(tempInput);
			input = input.substring(0, input.indexOf(tempInput));
		}
		
		for(String value: splitted){
			System.out.println(value);	
		}
```


----------

