Java替换字符串中的所有方括号

Posted

技术标签:

【中文标题】Java替换字符串中的所有方括号【英文标题】:Java replace all square brackets in a string 【发布时间】:2013-01-04 17:10:34 【问题描述】:

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

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

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

但我的结果是:[Chrissman | 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)

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

哎呀,我快被吓到了。 (我的意思是这是一种恭维) 不,它不起作用。线程“Thread-4”中的异常 java.util.regex.PatternSyntaxException:索引 0 附近的未封闭字符类 [ ^ 在 java.util.regex.Pattern.error(未知来源)在 java.util.regex.Pattern.clazz(未知源) 在 java.util.regex.Pattern.sequence(Unknown Source) 在 java.util.regex.Pattern.expr(Unknown Source) 在 java.util.regex.Pattern.compile(Unknown Source) 在 java.util.regex .Pattern.(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceAll(Unknown Source) 方括号绝对正则表达式中的“特殊”字符 - 它们用于范围,例如[a-z]. @JonSkeet 感谢您指出这一点。我正在搜索 Java 特殊字符列表,但我忘记了 replaceAll 正在寻找正则表达式。 @ZbarceaChristian 我删除了答案中未转义的括号部分,对于任何混淆,我深表歉意。原来的抛出错误吗?【参考方案2】:

您的正则表达式仅匹配(并删除)后续方括号。改用这个:

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

如果你只想用中间的内容替换括号对,你可以使用这个:

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

【讨论】:

这应该是公认的答案,更简洁更简洁【参考方案3】:

您当前正在尝试删除 exact 字符串 [] - 两个方括号之间没有任何内容。相反,您想删除所有 [ 并单独删除所有 ]

我个人会避免在这里使用replaceAll,因为它会由于正则表达式部分而引入更多的混乱 - 我会使用:

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

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

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

【讨论】:

【参考方案4】:

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

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

输出 -

Nickname: Chrissman | Power: 1

【讨论】:

对我来说很好。谢谢!【参考方案5】:

你也可以这样做:

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

【讨论】:

【参考方案6】:

我使用这个正则表达式替换括号内的每个字符串:

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

【讨论】:

【参考方案7】:
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);

【讨论】:

【参考方案8】:

   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 -

【讨论】:

删除大括号后我想添加 - 在开始时如何实现这个前:-123 String finalVal1 = result.replaceAll("[()]", "-"); // 请使用这段代码,这是你在问什么? o/p Agilanbu finalVal : -3428 /* 将 () 符号替换为 - */ 我的值为 (324) ,我希望它为 -324,使用这个 m.replaceAll("[()]", "-");我得到-324-,请帮帮我 字符串结果 = "(3428)"; Log.e("Agilanbu finalVal 0", 结果); String finalVal11 = result.replaceAll("[(]", "-"); Log.e("Agilanbu finalVal 1 ", finalVal11); String finalVal = finalVal11.replaceAll("[)]", ""); Log.e("阿吉兰布 finalVal 2", finalVal);

以上是关于Java替换字符串中的所有方括号的主要内容,如果未能解决你的问题,请参考以下文章

替换字符串中的括号和方括号

替换字符串中的标记

java 替换文本中的所有指定的字符串,比如#*替换为sq, #**替换为we, 我使用了replaceAll进行的替换

字符串空格替换合法括号序列判断求最长无重复子串问题

仅在大括号外替换文件中的字符串

用bash中的另一个字符串替换结束括号