Java将所有方括号替换为字符串


69

我想从字符串中删除方括号,但我不知道如何。

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

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

但是我的结果是:[克里斯曼| 1]方括号不会被删除。

我尝试使用其他正则表达式:"\\[.*?\\]""\\[\\d+\\]" 但结果是相同的,方括号仍附加在字符串上。

编辑:

我试过了:

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

现在我得到:

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)

Answers:


137

replaceAll方法尝试匹配尝试单独替换这些项目时[]不存在的String文字String

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

2
kes,我要被打滑了。(我的意思是称赞)
Kevin Bowersox

不,这不起作用。线程“ Thread-4”中的异常java.util.regex.PatternSyntaxException:索引0附近的未封闭字符类[java.util.regex.Pattern.error(未知源)的java.util.regex.Pattern.clazz(未知源) java.util.regex.Pattern.sequence的源代码(未知源)java.util.regex.Pattern.expr的java.util.regex.Pattern.compile(未知源)的java.util.regex .Pattern。<init>(未知源),java.util.regex.Pattern.compile(未知源),java.lang.String.replaceAll(未知源)
Zbarcea Christian

方括号绝对正则表达式中的“特殊”字符-用于范围,例如[a-z]
乔恩·斯基特

@JonSkeet感谢您指出这一点。我正在搜索Java特殊字符列表,但是却忘记了replaceAll在寻找正则表达式。
Kevin Bowersox

@ZbarceaChristian我删除了答案中未转义的括号部分,对于由此引起的困惑,我深表歉意。原稿抛出错误吗?
凯文·鲍沃索克斯

67

您的正则表达式仅匹配(并删除)后续的方括号。使用此代替:

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

如果您只想用其间的内容替换括号对,则可以使用以下方法:

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

这应该是公认的答案,更简洁,更简洁
locus2k

25

您目前正在尝试删除确切的字符串[]-两个方括号之间没有任何空格。相反,您要删除全部[并单独删除全部]

就个人而言,我会避免replaceAll在这里使用,因为正则表达式部分会引起更多混乱-我会使用:

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

如果您确实想进行全模式匹配,请仅使用采用正则表达式的方法。当您只想替换所有出现的固定字符串时,replace将更易于阅读和理解。

(还有其他一些使用正则表达式形式并真正匹配模式的方法,但是我认为上面的代码要简单得多。)


12

使用正则表达式[\\[\\]]-

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

输出-

Nickname: Chrissman | Power: 1

对我来说很好。谢谢!
nocdib

6

您也可以这样做:

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

0
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

   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 -


删除括号后,我想添加-开始时如何实现
此前

字符串finalVal1 = result.replaceAll(“ [()]”,“-”); //请使用此代码,这是您问的吗?o / p Agilanbu finalVal:-3428 / *将()符号替换为-* /
Agilanbu

我的值是(324),我希望它使用此m.replaceAll(“ [()]”,“-”); -324 iam收到-324-,请帮帮我
sameo joshi 18'Oct

字符串结果=“(3428)”; Log.e(“ Agilanbu finalVal 0”,结果); 字符串finalVal11 = result.replaceAll(“ [(]”,“-”); Log.e(“ Agilanbu finalVal 1”,finalVal11);字符串finalVal = finalVal11.replaceAll(“ [)]”,“”); Log.e(“ Agilanbu finalVal 2”,finalVal);
阿吉兰布
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.