Java remplace tous les crochets dans 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 expression régulière différente: "\\[.*?\\]", "\\[\\d+\\]" mais le résultat est le même, les crochets toujours attachés sur la chaîne.

Modifier:

J'ai essayé:

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

Et maintenant je reçois:

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)
Author: Zbarcea Christian, 2013-01-21

7 answers

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

String str = "[Chrissman-@1]";
str = str.replaceAll("\\[", "").replaceAll("\\]","");
 103
Author: Kevin Bowersox, 2013-01-21 16:07:07

Votre expression régulière 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 entre les deux, vous pouvez utiliser ceci:

str = str.replaceAll("\\[(.*?)\\]", "$1");
 50
Author: Bergi, 2013-01-21 15:44:35

Vous essayez actuellement de supprimer la exact string [] - deux crochets sans rien entre eux. Au lieu de cela, vous souhaitez supprimer tous les [ et supprimer 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 voulez vraiment faire une correspondance complète des motifs. Lorsque vous voulez juste remplacer toutes les occurrences d'un chaîne, 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 beaucoup plus simple.)

 20
Author: Jon Skeet, 2013-01-21 15:45:06

Utiliser les regex [\\[\\]] -

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

Sortie -

Nickname: Chrissman | Power: 1
 8
Author: Subhrajyoti Majumder, 2013-01-21 15:56:56

Vous pouvez aussi faire comme ceci:

String data = "[yourdata]";
String regex = "\\[|\\]";
data  = data .replaceAll(regex, "");
System.out.println(data);
 5
Author: Xar E Ahmer, 2014-05-05 06:20:43

Use this line:) String result = strCurBal.replaceAll("[(" what ever u need to remove ")]", ""); 

                String strCurBal = "(+)3428";
                Log.e(" before omit ", strCurBal);
                String result = strCurBal.replaceAll("[()]", "");
                Log.e(" Result Omit ", result);

                o/p :
                before omit : (+)3428
                Result Omit :  +3428


            String finalVal = result.replaceAll("[+]", "");
            Log.e("finalVal  ", finalVal);

            finalVal : 3428
 0
Author: Agilanbu, 2017-05-31 06:55:31
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
Author: Anmol Devta, 2018-06-30 06:30:07