You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:35:53