Input/Output String Suchen und Ersetzen

JuergenE

Mitglied
Hallo Community,
ich wollte ein kleines Programm schrieben, welches in der Lage ist, aus einem gegebenem String ein explizites Wort heraus zu suchen und dieses durch ein Neues zu ersetzen.
Ich bin folgenden Code nun schon mehrfach gedanklich durch, finde den Fehler jedoch nicht.
Bitte um Hilfe..

Java:
String inputText = "Das ist ein simpler Test";
		String searchText = "ein";
		String setText = "kein";
		
		System.out.println("String aktuell: " + inputText);
		
		StringTokenizer strTok = new StringTokenizer(inputText, " ");
		String[] stringArray = new String[strTok.countTokens()];
		
		for(int i = 0; strTok.hasMoreTokens(); i++) {
		        stringArray[i] = strTok.nextToken();
		}
		
		for(int i = 0; i < stringArray.length; i++){
	        System.out.println((i+1) + ". Wort:\t" + stringArray[i]);
	    }
		
		for(int i = 0; i < stringArray.length; i++){
	        if((stringArray[i]) == (searchText)) {
	        	inputText.replace(stringArray[i], setText);
	        }
	    }
		
		System.out.println("String danach: " + inputText);

Grüße Juergen
 
Zuletzt bearbeitet:
Korrekt:

Java:
            if((stringArray[i]).equals(searchText)) {
            	inputText = inputText.replace(stringArray[i], setText);
            }
 
Korrekt:

Java:
            if((stringArray[i]).equals(searchText)) {
            	inputText = inputText.replace(stringArray[i], setText);
            }

Aber ich verstehe den ganzen Sinn davor nicht, mit dem Tokenizer etc.
Ein einfaches replace mit einer Zeile reicht doch völlig aus?!
Java:
		String inputText = "Das ist ein simpler Test";
        String searchText = "ein";
        String setText = "kein";
        inputText = inputText.replace(searchText, setText);
        System.out.println(inputText);
 
Zuletzt bearbeitet:
Vermutlich sollen nur ganze Wörter (ich nehme an, dass das die Tokens sind) ersetzt werden.

Edit: Wobei ich gerade sehe, dass das wohl auch nicht so ganz das Wahre ist. Besser wäre es wohl mit substring()/indexOf() zu arbeiten...
 
Zuletzt bearbeitet:
Entweder kennt sich der TS nicht aus oder er versucht mehrere Iterationen durchzuführen ...

"Das ist ein ein ein simpler Test"

ergibt:

"Das ist kkkein kkkein kkkein simpler Test" 😉
 
Nabend zusammen,

um den Sinn dahinter zu erläutern:

Es geht darum, den kompletten Text aus einer TextArea (JavaFX) zu "scannen" und ein bestimmtes darin vorkommendes Wort durch ein Anderes Wort zu ersetzen. Eine Suchen und Ersetzen Funktion eben.
Und ich dachte, der Tokenizer würde sich anbieten, damit man jeden einzelnen String ansprechen kann.
Das die replace Methode das auch so schon tut, war mir nicht bekannt.

Jetzt ist die Frage, ob das Ganze auch bei einer TextArea greift.. Ich werde es gleich mal ausprobieren.
 
Zuletzt bearbeitet:
Also auch mit einer TextArea scheint es zu gehen.
Jedoch bekomme ich es nicht in meiner eigentlichen Zielanwendung zum Laufen.

Dieser searchButton löst eine Action aus wenn er gedrückt wird und ruft die Methode checkEquality auf.
Der Aufruf funktioniert auch - alle 3 Strings werden auch korrekt übergeben.
textArea.getText() ist der Text, den ein Benutzer eingeben soll
t1.getText() ist der Text, mit dem Wort, das auf Übereinstimmung geprüft werden soll(Suchen Button)
t2.getText() ist das Wort zum Ersetzen (Ersetzen Button)
Java:
searchButton
								.setOnAction(new EventHandler<ActionEvent>() {
									@Override
									public void handle(ActionEvent e) {
	
									checkEquality(textArea.getText(), t1.getText(), t2.getText());
									
										
									}
								});

Die Methode sieht wie folgt aus

Java:
public static void checkEquality(String inputText, String searchText, String setText) {

StringTokenizer strTok = new StringTokenizer(inputText, " ");
		String[] stringArray = new String[strTok.countTokens()];
		
		for(int i = 0; strTok.hasMoreTokens(); i++) {
		        stringArray[i] = strTok.nextToken();
		        
		}
		
		for(int i = 0; i < stringArray.length; i++){
	        if((stringArray[i]).equals(searchText)) {
	        	inputText = inputText.replace(stringArray[i], setText);
	        	
	        }
	    }
}

Die erzeugte TextArea zeigt die Änderung aber nicht an.
Muss ich die Anzeige vielleicht noch "erzwingen" ?
 
Du musst den Text explizit in der jTextArea setzen:

Java:
textArea.setText("Neuer String");

PS: Wenn du Muster in Texten finden und bearbeiten willst, bieten sich reguläre Ausdrücke an: Java Regex Tutorial
 

Zurück
Oben