Java ersetzt alle eckigen Klammern in einem String

Lesezeit: 3 Minuten

Benutzeravatar von Zbarcea Christian
Zbarcea Christian

Ich möchte eckige Klammern aus einer Zeichenfolge entfernen, aber ich weiß nicht wie.

String str = "[Chrissman-@1]";
str = replaceAll("\\[\\]", "");

String[] temp = str.split("-@");
System.out.println("Nickname: " + temp[0] + " | Power: " + temp[1]);

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's user avatar
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.

String str = "[Chrissman-@1]";
str = str.replaceAll("\\[", "").replaceAll("\\]","");

  • 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:

String replaced = original.replace("[", "").replace("]", "");

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.)

Benutzeravatar von Subhrajyoti Majumder
Subhrajyoti Majumder

Verwenden Sie Regex [\\[\\]]

String str = "[Chrissman-@1]";
String[] temp = str.replaceAll("[\\[\\]]", "").split("-@");
System.out.println("Nickname: " + temp[0] + " | Power: " + temp[1]);

Ausgang –

Nickname: Chrissman | Power: 1

Benutzeravatar von Zar E Ahmer
Zar E. Ahmer

Du kannst es auch so machen:

String data = "[yourdata]";
String regex = "\\[|\\]";
data  = data .replaceAll(regex, "");
System.out.println(data);

Benutzeravatar von gOliveiraC
gOliveiraC

Ich verwende diese Regex, um jede Zeichenfolge in Klammern zu ersetzen:

var= var.replaceAll("\\[\\w+", "[*").replaceAll("\\]", "]");

Benutzeravatar von Papershine
Papierglanz

String str, str1;
Scanner sc = new Scanner(System.in);

System.out.print("Enter a String : ");
str = sc.nextLine();


str1 = str.replaceAll("[aeiouAEIOU]", "");



System.out.print(str1);

1424800cookie-checkJava ersetzt alle eckigen Klammern in einem String

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy