未公开的字符类错误?

ylu*_*.ca 14 java regex split

这是错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

这个错误意味着什么以及需要做些什么来修复上面的代码?

ccj*_*mne 44

String#split使用正则表达式,[(和])不是标准字符,"正则表达式".所以,他们需要被转义 - 使用\[(和\]).

但是,在Java中 String,\它既不是标准字符,也需要进行转义.

因此,只是为了分裂[,使用的Java String"\\["; 而你正试图获得:

.split("\\], \\[")
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,你不只是在语义上转义正则表达式中的一些特定字符,而是实际上希望你的整个模式按字面解释:有一种方法可以做到这一点

Pattern#quote 用来表示:

您的模式中的元字符[...]将没有特殊含义.

(来自上面链接的Javadoc)

在这种情况下,我建议您使用以下内容(理论上更明智和可读):

.split(Pattern.quote("], ["))
Run Code Online (Sandbox Code Playgroud)


xp5*_*500 5

Split接收正则表达式,[,]字符在正则表达式中有意义,所以你应该用\\[和转义它们\\].

你当前正在这样做的方式,解析器找到一个没有前面的[因此它会抛出该错误.