Aber mein Ergebnis ist: [Chrissman | 1]
Die eckigen Klammern werden nicht entfernt.
Ich habe versucht, eine andere Regex zu verwenden: "\\[.*?\\]", "\\[\\d+\\]"
aber das Ergebnis ist das gleiche, die eckigen Klammern sind immer noch an der Zeichenfolge angebracht.
Bearbeiten:
Ich habe es versucht:
str.replaceAll("]", ""); str.replaceAll("[", "");
And now I’m getting:
Exception in thread "Thread-4" java.util.regex.PatternSyntaxException: Unclosed character class near index 0
[
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.clazz(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
Kevin Bowersox
The replaceAll method is attempting to match the String literal [] was nicht innerhalb der existiert String Versuchen Sie, diese Artikel separat zu ersetzen.
Huch, ich werde gleich skeeted. (Ich meine das als Kompliment)
– Kevin Bowersox
21. Januar 2013 um 15:49 Uhr
Nein, es funktioniert nicht. Ausnahme in Thread „Thread-4“ java.util.regex.PatternSyntaxException: Nicht geschlossene Zeichenklasse nahe Index 0 [ ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.regex.Pattern.clazz(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.<init>(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceAll(Unknown Source)
– Zbarcea Christian
Jan 21, 2013 at 16:03
Square brackets absolutely are “special” characters in regular expressions – they’re used for ranges, e.g. [a-z].
– Jon Skeet
21. Januar 2013 um 16:05 Uhr
@JonSkeet Danke für den Hinweis. Ich habe in Java-Sonderzeichenlisten gesucht, aber ich habe vergessen, dass replaceAll nach Regex gesucht hat.
– Kevin Bowersox
21. Januar 2013 um 16:07 Uhr
@ZbarceaChristian Ich habe den Teil der Antwort ohne Escapezeichen entfernt. Ich entschuldige mich für etwaige Verwirrung. Gibt das Original einen Fehler aus?
– Kevin Bowersox
21. Januar 2013 um 16:08 Uhr
Ihre Regex passt (und entfernt) nur nachfolgende eckige Klammern. Verwenden Sie stattdessen Folgendes:
str = str.replaceAll("\\[|\\]", "");
Wenn Sie nur Klammerpaare mit Inhalt dazwischen ersetzen möchten, können Sie dies verwenden:
str = str.replaceAll("\\[(.*?)\\]", "$1");
Dies sollte die akzeptierte Antwort sein, sauberer und prägnanter
– locus2k
11. März 2019 um 18:25 Uhr
Sie versuchen gerade, die zu entfernen genau Schnur [] – zwei eckige Klammern mit nichts dazwischen. Stattdessen möchten Sie alle entfernen [ and separately remove all ].
Ich persönlich würde die Verwendung vermeiden replaceAll hier, da es aufgrund des Regex-Teils zu mehr Verwirrung führt – ich würde verwenden:
Verwenden Sie nur die Methoden, die reguläre Ausdrücke verwenden, wenn Sie Ja wirklich einen vollständigen Musterabgleich durchführen möchten. Wenn Sie nur alle Vorkommen einer festen Zeichenfolge ersetzen möchten, replace ist einfacher zu lesen und zu verstehen.
(Es gibt alternative Ansätze, die die reguläre Ausdrucksform verwenden und Muster wirklich abgleichen, aber ich denke, der obige Code ist wesentlich einfacher.)