web-dev-qa-db-fra.com

Java remplace tous les crochets d'une chaîne

Je veux supprimer les crochets d'une chaîne, mais je ne sais pas comment.

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

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

Mais mon résultat est: [Chrissman | 1] Les crochets ne sont pas supprimés.

J'ai essayé d'utiliser une regex différente: "\\[.*?\\]", "\\[\\d+\\]" mais le résultat est identique, les crochets sont toujours attachés à la chaîne.

Modifier:

J'ai essayé:

str.replaceAll("]", "");
str.replaceAll("[", "");

Et maintenant j'obtiens:

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)
61
Zbarcea Christian

La méthode replaceAll tente de faire correspondre le littéral String [] qui n’existe pas dans String, essayez de remplacer ces éléments séparément.

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

Votre expression rationnelle correspond (et supprime) uniquement les crochets suivants. Utilisez ceci à la place:

str = str.replaceAll("\\[|\\]", "");

Si vous souhaitez uniquement remplacer les paires de crochets par du contenu, vous pouvez utiliser ceci:

str = str.replaceAll("\\[(.*?)\\]", "$1");
58
Bergi

Vous essayez actuellement de supprimer exact string [] - deux crochets avec rien entre eux. Au lieu de cela, vous voulez supprimer tous les [ et retirez séparément tous les ].

Personnellement, j’éviterais d’utiliser replaceAll ici car cela introduit plus de confusion en raison de la partie regex - j’utiliserais:

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

Utilisez uniquement les méthodes qui prennent des expressions régulières si vous vraiment voulez faire un filtrage complet. Lorsque vous souhaitez simplement remplacer toutes les occurrences d'une chaîne fixe, replace est plus simple à lire et à comprendre.

(Il existe des approches alternatives qui utilisent la forme d'expression régulière et correspondent vraiment aux modèles, mais je pense que le code ci-dessus est considérablement plus simple.)

20
Jon Skeet

utilisez regex [\\[\\]] -

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

sortie -

Nickname: Chrissman | Power: 1
10

Vous pouvez aussi le faire comme ceci:

String data = "[yourdata]";
String regex = "\\[|\\]";
data  = data .replaceAll(regex, "");
System.out.println(data);
6
Xar E Ahmer
   Use this line:) String result = strCurBal.replaceAll("[(" what ever u need to remove ")]", "");

    String strCurBal = "(+)3428";
    Log.e("Agilanbu before omit ", strCurBal);
    String result = strCurBal.replaceAll("[()]", ""); // () removing special characters from string
    Log.e("Agilanbu after omit ", result);
   
    o/p :
    Agilanbu before omit : (+)3428
    Agilanbu after omit :  +3428

    String finalVal = result.replaceAll("[+]", ""); // + removing special characters from string
    Log.e("Agilanbu finalVal  ", finalVal);
    o/p
    Agilanbu finalVal : 3428
            
    String finalVal1 = result.replaceAll("[+]", "-"); // insert | append | replace the special characters from string
    Log.e("Agilanbu finalVal  ", finalVal1);
    o/p
    Agilanbu finalVal : -3428  // replacing the + symbol to -
1
Agilanbu
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);
0
Anmol Devta