Suchen Sie nach dem ersten Wort, das ersetzt werden soll. Wenn es sich in der Zeichenfolge befindet, wiederholen Sie den Teil der Zeichenfolge vor dem Auftreten und den Teil der Zeichenfolge nach dem Auftreten.
Fahren Sie andernfalls mit dem nächsten zu ersetzenden Wort fort.
Eine naive Implementierung könnte so aussehen
public static String replaceAll(String input, String[] search, String[] replace) {
return replaceAll(input, search, replace, 0);
}
private static String replaceAll(String input, String[] search, String[] replace, int i) {
if (i == search.length) {
return input;
}
int j = input.indexOf(search[i]);
if (j == -1) {
return replaceAll(input, search, replace, i + 1);
}
return replaceAll(input.substring(0, j), search, replace, i + 1) +
replace[i] +
replaceAll(input.substring(j + search[i].length()), search, replace, i);
}
Beispielnutzung:
String input = "Once upon a baz, there was a foo and a bar.";
String[] search = new String[] { "foo", "bar", "baz" };
String[] replace = new String[] { "bar", "baz", "foo" };
System.out.println(replaceAll(input, search, replace));
Ausgabe:
Once upon a foo, there was a bar and a baz.
Eine weniger naive Version:
public static String replaceAll(String input, String[] search, String[] replace) {
StringBuilder sb = new StringBuilder();
replaceAll(sb, input, 0, input.length(), search, replace, 0);
return sb.toString();
}
private static void replaceAll(StringBuilder sb, String input, int start, int end, String[] search, String[] replace, int i) {
while (i < search.length && start < end) {
int j = indexOf(input, search[i], start, end);
if (j == -1) {
i++;
} else {
replaceAll(sb, input, start, j, search, replace, i + 1);
sb.append(replace[i]);
start = j + search[i].length();
}
}
sb.append(input, start, end);
}
Leider hat Java String
keine indexOf(String str, int fromIndex, int toIndex)
Methode. Ich habe die Implementierung von indexOf
hier weggelassen , da ich nicht sicher bin, ob sie korrekt ist, aber sie kann auf ideone gefunden werden , zusammen mit einigen groben Zeitplänen verschiedener hier veröffentlichter Lösungen.
swap(String s1, String s2, String s3)
, die alle Vorkommen vons2
mit vertauschts3
und umgekehrt.