In einem String nach Wörtern suchen und ersetzen

fenerli23

Erfahrenes Mitglied
hi,

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

diese klappt, habe das so realisiert..
Code:
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...?
Code:
			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;
				
			}
 
hi,

also wenn ich das richtig sehe ist die logic föllig daneben....wenn du was suchen & ersetzte willst schau dir das paket
Code:
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
 
Zuletzt bearbeitet von einem Moderator:
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.
 
Hi,

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

Code:
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;
				
			}
}
}
 
@shamane
So hast du aber keine Moeglichkeit die einzelnen Werte anders zu ersetzen, sondern ersetzt alle mit var1 ^^
 
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
 
@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^^
 
Hi,

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

Code:
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;
				
			}
}
}


habe das mal ausprobiert klappt nicht...
 
@shamane
Oh die Zeile hab ich uebersehen ^^ Sorry

@_jsd
Aber es funktioniert so, fuer den Anfang ist es doch in Ordnung.
 
@fenerli23:ja, sorry. hatte übersehen, das immer das nächste token eingelesen wurde...

Code:
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;
				
			}
}
}
 
Zurück