当前位置: 首页 > 面试题库 >

未公开的字符类错误?

庾君博
2023-03-14
问题内容

这是错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 3
], [
   ^
    at java.util.regex.Pattern.error(Pattern.java:1924)
    at java.util.regex.Pattern.clazz(Pattern.java:2493)
    at java.util.regex.Pattern.sequence(Pattern.java:2030)
    at java.util.regex.Pattern.expr(Pattern.java:1964)
    at java.util.regex.Pattern.compile(Pattern.java:1665)
    at java.util.regex.Pattern.<init>(Pattern.java:1337)
    at java.util.regex.Pattern.compile(Pattern.java:1022)
    at java.lang.String.split(String.java:2313)
    at java.lang.String.split(String.java:2355)
    at testJunior2013.J2.main(J2.java:31)

这是导致问题的代码区域。

String[][] split = new String[1][rows];

split[0] = (Arrays.deepToString(array2d)).split("], ["); //split at the end of an array row

该错误是什么意思,需要做些什么才能修复上面的代码?


问题答案:

你要:

.split("\\], \\[")`

每个方括号 转义 两次 -对于需要从其特殊含义中删除它们的每种上下文一次:一次在
正则表达式中
,然后在 Java
String中


Pattern#quote当您需要对
整个模式 进行 字面 解释时,请考虑使用。

说明

String#split有工作
正则表达式
,但[]没有标准字符,正则表达式明智的:他们在这方面有特殊的意义。

为了使 它们脱离其特殊含义 并仅 匹配实际的方括号 ,需要对它们进行 转义 ,方法是在每个 方括号 前面加一个 反斜杠
-即使用\[\]

但是,在 Java
String中

\它也不是标准字符,也需要 转义

因此,仅对进行拆分[,使用的 String"\\[",您正在尝试获取:

.split("\\], \\[")

明智的选择

但是,在这种情况下,您不仅要在语义上 转义正则表达式中的几个特定字符 ,而且实际上希望 您的整个模式都按字面意义进行解释
:有一种方法可以做到这一点

Pattern#quote
用于表示:

您的模式中的元字符将没有任何特殊含义。

(来自上面链接的Javadoc)

在这种情况下,我建议您使用以下更明智和可读的方法:

.split(Pattern.quote("], ["))


 类似资料:
  • 以下是错误: 这是导致问题的代码区域。 这个错误意味着什么?需要做什么来修复上面的代码?

  • 在使用实体框架DbContext类型基类的存储库项目中,我有几个存储库类。 基类,基类 员工回购界面 员工回购 我正在将Repo类添加到Asp中的Windsor容器中。Mvc网站使用基于存储库项目内接口的安装程序。我在这里查看了容器,得到了三个存储库。 我尝试注册DbContext,如下所示,但得到了相同的结果。 然后,在我的ApiController中,我使用Property注入来实例化Repo

  • 我用Apache POI用字符串公式创建Excel文件,得到#VALUE!结果文件中有错误。 源代码是 (printCellInfo是我下面讲的Info方法)而错误单元格是B1。Excel显示“单元格中使用的值的数据类型不正确”。但是如果打开这个单元格进行编辑(使用F2)并按回车键-公式计算正确!!! 现在关于手机信息。帮助方法是 主执行的输出为 所以B0一开始是空白,公式插入后是数字。为什么PO

  • 问题内容: 我在Docker中设置了一个简单的节点服务器。 Docker文件 example.js 现在建立图像 现在在容器中运行 验证容器正在运行并且端口已映射: 现在,让我们附加到容器并验证服务器是否在其中运行: 并在容器命令行中输入: 看起来不错吧? 问题 当我在主机上执行相同的curl命令(或使用浏览器导航到http:// localhost:1337 )时,什么都看不到。 知道为什么容器

  • 问题内容: 以下小测试将引发NPE: 但是,compareTo()的Javadoc 并未提及该参数不能为。这很奇怪,因为Javadocs通常会提到何时参数不能为。 这仅仅是文档中的一个小故障,还是我想念的更根本的原因/扭曲? 问题答案: 查看Comparable接口时,您可以得到一些解释: 请注意,null不是任何类的实例,即使e.equals(null)返回false,e.compareTo(n

  • 我的(简化)情况: Service@webservice 容器getContainer()@webmethod 容器 无效setObjects(ContainableObjects[]objects) ContainableObjects[]getObjects() ContainedInt[extends ContainableObject] void setValue(int value) i