Teile eines Strings ersetzen

JUsername

Grünschnabel
Hallo,

ich habe folgendes Problem. In einem String möchte ich mit einem regulären Ausdruck Teilstrings auswählen. Diese möchte ich dann verändern und wieder in den String einfügen. Wie kann man sowas mit den Regex-Klassen von Java machen? Es müsste sowas wie "Matcher.replaceMatchWith(String s)" geben. replaceAll nützt mir leider nichts, da der Teilstring nicht immer durch den selben String ersetzt werden soll.
 
Hey,

leider kann ich dir in Java momentag nicht weiterhelfen. Aber suchst du etwas ähnlich wie folgende Funktion in PHP?

http://de.php.net/manual/de/function.preg-replace-callback.php

Vielleicht kann man so die Suche ein wenig einschränken und kommt schneller zum Ergebnis ;) Dort wird mit dem gefunden Parameter aus der regex eine neue Funktion aufgerufen - dann kann man den Krams verarbeiten und wieder in den String einbinden.

Am besten mal warten bis jemand erfahreneres in Java was dazu sagt.
Ist das denn was was du suchst?
 
Ich hab auch noch nicht ganz verstanden was du möchtest. Gibt doch mal ein Beispiel?

Vielleicht hilft dir das aber schon weiter?
Java:
public static void main(String[] args) {
	final String search = "Hallo Welt";
	final String regExp = "(\\w*) (\\w*)";
	
	final String replaceAll = search.replaceAll(regExp, "$1 du $2");
	System.out.println(replaceAll);
}

Ergebnis:
Hallo du Welt

Mehr kann man noch mit dem Pattern und Matcher machen.
 
Zuletzt bearbeitet:
Ich möchte beispielsweise den folgenden String umwandeln:

"Ich laufe nach Hause"

Als Regex verwende ich "\\b\\w*\\b".

Wird nun ein Teilstring gematcht (z.B. "laufe") möchte ich die Stammform ermitteln ("lauf") und diese wieder in den String "einsetzen". Das endgültige Ergebnis sollte sein:

"Ich lauf nach Haus"

Die String.replaceAll-Methode setzt ja immer eine festen String ein (in Deinem Beispiel "$1 du $2").
 
Ich hab's!

So funktioniert es:

Java:
Matcher m = Pattern.compile(pattern).matcher(input);
StringBuffer sb = new StringBuffer();
boolean result = m.find();

while (result) {
	m.appendReplacement(sb, m.group(1)+x); // Testweise x hinzufügen
	System.out.println(m.group(1));
	result = m.find();
}

m.appendTail(sb);
		
System.out.println(sb.toString());
 
Zurück