ich extrahiere ein # gefolt von mindestens einer Zahl aus dem String. Bei normalen Strings wie s="Ein #12 extrahieren"; funktioniert das auch. Bei s="(#12()"; bekomme ich eine Fehlermeldung mit unclosed group
der Fehler tritt sicherlich erst in replaceAll auf oder?
im Zweifel immer komplette Fehlermeldung + Zeile benennen
weil replaceAll mit einem String "(" nicht funkioniert,
das könntest du auch einfacher in einer Zeile testen:
"(huhu)".replaceAll("(", "");
-> gleicher Fehler
Lösung: ( durch \\( escapen, damit es eine einfache Klammer ist und kein Sonderzeichen für reguläre Ausdrücke,
wahrscheinlich brauchst du dann eine Standardoperation,
die die Strings bereinigt für das replaceAll,
bisschen umständlich leider, wer kennt einen günstigen Weg?
naja, oder könnte man nicht auch einfach nur den regulären Ausdruck extrahieren? Ich weiß nicht ob meine Lösung so ideal ist mit dem Umweg über Str. replace. Denn jetzt müsste ich ja, wie du sagtest, alle Sonderzeichen escapen...
ja, das mit dem Matcher ist mir klar. Das Problem ist nur, dass sich mein String permanent ändert (in einer Schleife) und ich somit immer einen neuen Matcher erstellen müsste.
Pattern p=Pattern.compile();
Ich müsste es schaffen meinen Matcher immer einen neuen String zuzuweisen und mit Matcher find darin den regulären Ausdruck finden. Daran bin ich gescheitert, da ich wie gesagt in einer Schleife immer einen neuen String untersuchen will.
Gibt es eine Möglichkeit von Vornherein aus meinem String Sonderzeichen zu eliminieren oder mit \\ zu kennzeichnen ohne das für jedes Sonderzeichen einzeln mit String.replace zu machen?
Hat denn keiner noch eine Möglichkeit den Matcher in einer Schleife neu zu setzen? Oder alle Sonderzeichen aus nem String zu entfernen? Wäre Prima. Schönen Advent.
> kommt wieder eine Fehlermeldung
WELCHE Fehlermeldung?
und ist es so schwer, ein komplettes Testprogramm wie
Code:
public class Test {
public static void main(String[] args) throws Exception {
String a = "#123";
String b = "hasjajsh#123asksj";
String c = b.replaceAll(a, " ");
System.out.println(c);
}
}
zur Verfügung zu stellen?
für mich eine unnötige zusätzliche Arbeit von 2 Min.,
und dann tritt da noch nicht mal ein Fehler auf,
bei dir schon?