Unclosed Character Class Error?

2020-01-29 08:15发布

问题:

Here is the error:

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)

This is the area of the code that is causing the issues.

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

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

What does this error mean and what needs to be done to fix the code above?

回答1:

String#split works with a Regular Expression but [ (and ]) are not standard characters, "regex-wise". So, they need to be escaped — using \[ (and \]).

However, in a Java String, \ is not a standard character either, and needs to be escaped as well.

Thus, just to split on [, the Java String used is "\\["; and you are trying to obtain:

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

However, in this case, you're not just semantically escaping a few specific characters in a Regular Expression, but actually wishing that your entire pattern be interpreted literally: there's a method to do just that

标签: java regex split