Hallo,
ich möchte mit replaceAll Begriffe ersetzen, die man zuvor in ein JTextField eingeben kann (also ein einfacher "Suchen/Ersetzen" Dialog).
Wenn ich nun Pfadangaben habe, dann könnte ein Suchbegriff so aussehen:
Eingabe JTextField: ..\Listen\a.pdf
der entsprechende String, per getText(): ..\\Listen\\a.pdf
Wenn ich nun replaceAll anwende, gibt es eine Syntax-Exception, da der \ ein regEx-char ist, als das der in diesem Fall ja nicht gelten soll:
Wenn ich aber alle Punkte und Backslahes escape (ich habe gelesen, Punkte müssen auch escaped werden, weil sie sonst als reg. Ausdruck gelesen werden), habe ich folgenden String: \.\.\\\\Listen\\\\a.pdf
Hier gibt es nun eine IndexOutOfBounds-Exception:
Frage: Wie escape ich Suchausdrücke richtig, sodass ich sie mit "replaceAll" verwenden kann und bestimmte Zeichen im Suchausdruck nicht als regulärer Ausdruck gezählt werden?
ich möchte mit replaceAll Begriffe ersetzen, die man zuvor in ein JTextField eingeben kann (also ein einfacher "Suchen/Ersetzen" Dialog).
Wenn ich nun Pfadangaben habe, dann könnte ein Suchbegriff so aussehen:
Eingabe JTextField: ..\Listen\a.pdf
der entsprechende String, per getText(): ..\\Listen\\a.pdf
Wenn ich nun replaceAll anwende, gibt es eine Syntax-Exception, da der \ ein regEx-char ist, als das der in diesem Fall ja nicht gelten soll:
SCHWERWIEGEND: zettelkasten.CReplace$ReplaceTask@6c57093c failed: java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 7
(?i)..\Liste\
^
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 7
(?i)..\Liste\
Wenn ich aber alle Punkte und Backslahes escape (ich habe gelesen, Punkte müssen auch escaped werden, weil sie sonst als reg. Ausdruck gelesen werden), habe ich folgenden String: \.\.\\\\Listen\\\\a.pdf
Hier gibt es nun eine IndexOutOfBounds-Exception:
SCHWERWIEGEND: zettelkasten.CReplace$ReplaceTask@41c50999 failed: java.lang.StringIndexOutOfBoundsException: String index out of range: 3
java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.charAt(String.java:687)
at java.util.regex.Matcher.appendReplacement(Matcher.java:703)
at java.util.regex.Matcher.replaceAll(Matcher.java:813)
at java.lang.String.replaceAll(String.java:2190)
at zettelkasten.CReplace$ReplaceTask.doInBackground(CReplace.java:264)
Frage: Wie escape ich Suchausdrücke richtig, sodass ich sie mit "replaceAll" verwenden kann und bestimmte Zeichen im Suchausdruck nicht als regulärer Ausdruck gezählt werden?