Java正则中使用[]符号遇编译错误,求拆分含[]字符串的方法
解决Java正则表达式中使用
[和]的编译错误问题 你遇到的Unclosed character class错误,核心原因是**[和]在正则表达式里是定义字符类的特殊元字符**,直接写"[] "时,正则引擎会认为你刚打开了一个字符类(第一个[),但没有对应的闭合],因此抛出编译错误。
怎么正确匹配字面意义的[和]?
在正则中,要匹配字面的特殊字符,必须用反斜杠\转义。但在Java字符串里,\本身是转义字符,所以需要用**双反斜杠\\**来表示正则中的单个\。也就是说:
- 匹配
[要写\\[ - 匹配
]要写\\]
针对你的拆分需求的具体解决方案
你的目标是拆分包含[、]和空格的字符串"[11 11] 2000",这里分两种常见场景处理:
场景1:将[、]、空格都作为分隔符(自动合并连续分隔符)
如果希望把这些字符都当成分隔符,且避免因连续分隔符产生空字符串,可以用**字符类[...]**把转义后的符号和空格包含进去,再加上+表示匹配一个或多个连续的分隔符:
String strng = "[11 11] 2000"; // 匹配一个或多个[、]、空格作为分隔符 String ready[] = strng.split("[\\[\\] ]+"); // 输出结果:["11", "11", "2000"] for (String part : ready) { System.out.println(part); }
场景2:用|分隔不同的分隔符(等价写法)
如果你不习惯字符类,也可以用|来分隔不同的匹配规则,同样记得转义特殊字符并加上+处理连续分隔符:
String strng = "[11 11] 2000"; String ready[] = strng.split("(\\[|\\]| )+");
为什么原来的写法报错?
再回头看你写的strng.split("[] "):
- 第一个
[被正则引擎识别为字符类的开始,后面的]并不会被当成字符类的结束(只有当]是字符类的第一个字符时,才会被当作字面量)。正则引擎会认为你打开的字符类没有闭合,因此抛出Unclosed character class错误。
内容的提问来源于stack exchange,提问作者Nodirxon
相关产品推荐
相关产品推荐

