Voici l'erreur:
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)
C'est le domaine du code qui cause les problèmes.
String[][] split = new String[1][rows];
split[0] = (Arrays.deepToString(array2d)).split("], ["); //split at the end of an array row
Que signifie cette erreur et que faut-il faire pour corriger le code ci-dessus?
String#split
fonctionne avec un expression régulière mais [
(et ]
) ne sont pas des caractères standard, "regex-wise". Donc, ils doivent être échappés - en utilisant \[
(et \]
).
Cependant, dans un JavaString
, \
n'est pas non plus un caractère standard, et doit être également échappé.
Ainsi, juste pour diviser sur [
, la String
Java utilisée est "\\["
; et vous essayez d'obtenir:
.split("\\], \\[")
Cependant, dans ce cas, vous n'êtes pas seulement sémantiquement échappant à quelques caractères spécifiques dans une expression régulière, mais vous souhaitez réellement que tout votre modèle soit interprété littéralement: il existe une méthode pour le faire ?? ??
Pattern#quote
est utilisé pour indiquer que le:
Les métacaractères [...] de votre modèle n'auront aucune signification particulière.
(à partir du lien Javadoc ci-dessus)
Dans ce cas, je vous recommande d’utiliser ce qui suit (sans conteste plus sensible et lisible):
.split(Pattern.quote("], ["))
Split reçoit une expression rationnelle et les caractères [] ont une signification dans l'expression rationnelle. Vous devez donc les échapper avec \\[
et \\]
.
Dans l’état actuel des choses, l’analyseur trouve un] sans précédent [donc jette cette erreur.
String.split () prend un expression régulière , pas une chaîne normale en tant qu'argument. Dans une expression régulière,] et [sont des caractères spéciaux, qui doivent être précédés de barres obliques inverses pour être pris littéralement. Utilisez .split("\\], \\[")
. (les doubles barres obliques inverses indiquent à Java d'interpréter la chaîne comme suit: "\],\[").
.split("], [")
^---start of char class
end----?
Le changer en
.split("], \[")
^---escape the [
Essayez de l'utiliser
String stringToSplit = "8579.0,753.34,796.94,\"[784.2389999999999,784.34]\",\"[-4.335912230999999, -4.3603307895,4.0407909059, 4.08669583455]\",[],[],[],0.1744,14.4,3.5527136788e-15,0.330667850653,0.225286999939,Near_Crash";
String [] arraySplitted = stringToSplit.replaceAll("\"","").replaceAll("\\[","").replaceAll("\\]","").trim().split(",");