Das Problem ist schnell umschrieben: Ich habe einen beliebigen String [c]a[/c] in dem ich gerne einen beliebigen Teil-String [c]b[/c] durch eine ebenfalls beliebigen String [c]c[/c] ersetzt wird. Mein einfacher Ansatz:
Wenn nun in [c]b[/c] allerdings Steuerzeichen enthalten sind, sollen diese ignoriert werden, also:
Nun habe ich folgenden Sonderfall gefunden, wo auch das nicht funktioniert:
Wenn ich das so durchlaufen lasse, dann bekomme ich folgende Exception:
Verwende ich [c]"\\$"[/c] statt $ funktioniert es (Was mir natürlich nichts bringt, da ich nicht weiß welche Steuerzeichen es noch gibt und vom Nutzer nicht verlangen kann, dass er diese kennt und ein "\" davor schreibt).
Das dumme an der Geschichte: Sowohl
wie auch
und
sollen vollkommen willkürliche Strings sein, die der Nutzer eingeben kann.
Daher meine Frage: Wie schreibe ich die Zeile
so, dass ich "a$b" erhalte!? (String c quoten ist auch nicht, da ich dann eine [c]java.lang.IllegalArgumentException: Illegal group reference[/c] erhalte. ;( )
Irgendwer eine Idee? :bahnhof:
Java:
a.replaceAll(b, c);
Wenn nun in [c]b[/c] allerdings Steuerzeichen enthalten sind, sollen diese ignoriert werden, also:
Java:
a.replaceAll(Pattern.quote(b), c);
Nun habe ich folgenden Sonderfall gefunden, wo auch das nicht funktioniert:
Java:
public static void main(final String[] args) {
String a = "a.b";
String b = ".";
String c = "$";
System.out.println(a.replaceAll(Pattern.quote(b), c));
}
Wenn ich das so durchlaufen lasse, dann bekomme ich folgende Exception:
Java:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(Unknown Source)
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceAll(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at Test.main(Test.java:28)
Verwende ich [c]"\\$"[/c] statt $ funktioniert es (Was mir natürlich nichts bringt, da ich nicht weiß welche Steuerzeichen es noch gibt und vom Nutzer nicht verlangen kann, dass er diese kennt und ein "\" davor schreibt).
Das dumme an der Geschichte: Sowohl
Code:
a
Code:
b
Code:
c
Daher meine Frage: Wie schreibe ich die Zeile
Code:
"a.b".replaceAll(".", "$");
Irgendwer eine Idee? :bahnhof:
Zuletzt bearbeitet von einem Moderator: