# In einem String nach Wörtern suchen und ersetzen



## fenerli23 (5. Dezember 2007)

hi,

ich habe einen String z.B.   "Hallo column1 wie gehts?"

diese klappt, habe das so realisiert..

```
StringTokenizer t = new StringTokenizer(s);
while(t.hasMoreElements()) {
 if ((t.nextToken()).equals("column1"))
			{
				System.out.println("Parameter: ");
				var1= in.readLine();
				help= s.replace("column1", var1);
				s = help;
				
			}
}
```

nun will ich aber auch dieses hier ändern können:
z.B "Hallo column1 column2 dir?"

wie kann ich nun eine abfrage realisieren in der ich beide Parameter finde und ersetzen kann... so klappt das leider nicht...?

```
if ((t.nextToken()).equals("column1") && (t.nextToken()).equals("column2"))
			{
				System.out.println("Parameter1: ");
				var1= in.readLine();
				System.out.println("Parameter2: ");
				var2= in.readLine();
				help= s.replace("column1", var1);
				s = help;
				help= s.replace("column2", var2);
				s = help;
				
			}
```


----------



## _jsd_ (5. Dezember 2007)

hi,

also wenn ich das richtig sehe ist die logic föllig daneben....wenn du was suchen & ersetzte willst schau dir das paket 
	
	
	



```
java.util.regex
```
 an. das nimmt man gewöhnlich für solche sachen...und lies die parameter vieleicht vorher ein...

hmf

ps: if ((t.nextToken()).equals("column1") && (t.nextToken()).equals("column2")) wird nie wahr, da das token nicht gleichzeitig column1 UND column2 sein kann


----------



## MiMi (5. Dezember 2007)

Du schaust auch ob das naechste Token colum1 AND colum2 ist. mach doch einfach 2 if abfragen, wenn er beim ersten colum2 ankommt, ersetzt er das wort, beim naechsten Token und das ist colum2 dann ersetzt er das.


----------



## shamane2000 (5. Dezember 2007)

Hi,

ich würde es vielleicht in noch einer schleife schachteln, um das ganze dynamisch zu gestalten:


```
StringTokenizer t = new StringTokenizer(s);
String[] Listendinge = {"column1" , "column2"};

while(t.hasMoreElements()) {

for(String Listeneintrag : Listendinge){

 if ((t.nextToken()).equals(Listeneintrag))
			{
				System.out.println("Parameter: ");
				var1= in.readLine();
				help= s.replace(Listeneintrag, var1);
				s = help;
				
			}
}
}
```


----------



## MiMi (5. Dezember 2007)

@shamane
So hast du aber keine Moeglichkeit die einzelnen Werte anders zu ersetzen, sondern ersetzt alle mit var1 ^^


----------



## _jsd_ (5. Dezember 2007)

ist aber alles viel zu aufwendig..man brauch doch nicht jedes wort anzu schauen...würde an dieser stelle absolut kein token verwenden...regularexpre. wären an dieser stelle performanter und besser...

hmf


----------



## shamane2000 (5. Dezember 2007)

@mimij85: Wenn ich nich völlig falsch liege, wird doch bei gefundenem Listeneintrag die var1 immer wieder neu eingelesen durch in.readline() ? ^^
@_jsd_: Ich muss zugeben das ich nich die kürzeste lösung gegeben hab, aber eine. Hab mit regularexpre noch nie gearbeitet. man lernt nie aus! danke^^


----------



## fenerli23 (5. Dezember 2007)

shamane2000 hat gesagt.:


> Hi,
> 
> ich würde es vielleicht in noch einer schleife schachteln, um das ganze dynamisch zu gestalten:
> 
> ...




habe das mal ausprobiert klappt nicht...


----------



## MiMi (5. Dezember 2007)

@shamane
Oh die Zeile hab ich uebersehen ^^ Sorry

@_jsd
Aber es funktioniert so, fuer den Anfang ist es doch in Ordnung.


----------



## shamane2000 (5. Dezember 2007)

@fenerli23:ja, sorry. hatte übersehen, das immer das nächste token eingelesen wurde...


```
StringTokenizer t = new StringTokenizer(s);
String[] Listendinge = {"column1" , "column2"};

while(t.hasMoreElements()) {
String Token = t.nextToken();
for(String Listeneintrag : Listendinge){

 if (Token.equals(Listeneintrag))
			{
				System.out.println("Parameter: ");
				var1= in.readLine();
				help= s.replace(Listeneintrag, var1);
				s = help;
				
			}
}
}
```


----------



## MiMi (5. Dezember 2007)

Achja, warum schriebt ihr variablen mal klein mal gross?
Normalerweise schreibt man die doch klein!


----------



## shamane2000 (5. Dezember 2007)

@mimij85: weil ich den kram im halbschlaf im browser schreib. aus dem kopf quasi. da denk ich nich so doll über codingstyle nach^^


----------



## fenerli23 (5. Dezember 2007)

ok habe es nochmal ausprobiert klappt auch ... danke...

am besten ist es doch noch ne abfrage zu machen, um zu wissen wieviele Paramter nun gesetzt werden müssen...?
Denn es kommt vor, das ich eins - 4 Parameter sezten soll...


----------

