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?
Split receives a regex and [, ] characters have meaning in regex, so you should escape them with
\\[
and\\]
.The way you are currently doing it, the parser finds a ] without a preceding [ so it throws that error.
Change it to
String.split() takes a regular expression, not a normal string as an argument. In a regular expression, ] and [ are special characters, which need to be preceded by backslashes to be taken literally. Use
.split("\\], \\[")
. (the double backslashes tell Java to interpret the string as "\], \[").Try to use it
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 JavaString
used is"\\["
; and you are trying to obtain: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