这里是错误:
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("\\], \\[")`
转义每个方括号两次 — 对于每个您需要从其特殊含义中剥离它们的上下文:在 Regular Expression 中首先,在 Java String 内其次。
考虑使用 Pattern#quote
当您需要整个模式被字面意思解释时。
说明
String#split
与 Regular Expression 一起工作但 [
和 ]
不是标准字符,正则表达式方面:它们在该上下文中具有特殊含义。
为了从它们的特殊含义中剥离它们并简单地匹配实际的方括号,它们需要被转义,这是由在每个前面加上一个反斜杠——也就是说,使用\[
和\]
。
但是,在 Java String , \
也不是标准字符,需要转义。
因此,仅在 [
上拆分,使用的 String 是 "\\["
并且您正试图获得:
.split("\\], \\[")
一个明智的选择
但是,在这种情况下,您不仅仅是在语义上转义正则表达式中的一些特定字符,而是实际上希望您的整个模式按字面解释:有一种方法可以做到这一点 🙂
Pattern#quote
用于表示:
Metacharacters [...] in your pattern will be given no special meaning.
(来自上面链接的 Javadoc)
在这种情况下,我建议您使用以下更明智和可读的内容:
.split(Pattern.quote("], ["))
关于java - 未封闭的字符类错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816788/