Unclosed Caractère De Classe De L'Erreur?
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 la zone du code qui pose les questions.
String[][] split = new String[1][rows];
split[0] = (Arrays.deepToString(array2d)).split("], ["); //split at the end of an array row
Que fait cette erreur signifie et ce qui doit être fait pour résoudre le code ci-dessus?
OriginalL'auteur ylun.ca | 2014-02-16
Vous devez vous connecter pour publier un commentaire.
String#split
fonctionne avec un Expression Régulière mais[
(et]
) ne sont pas en caractères standard, "regex-sage". Donc, ils ont besoin d'être échappé — à l'aide de\[
(et\]
).Cependant, dans un Java
String
,\
n'est pas une norme de caractère, et doit être échappé ainsi.Donc, juste pour split sur
[
, la JavaString
utilisé est"\\["
; et que vous essayez d'obtenir:Toutefois, dans ce cas, vous n'êtes pas seulement du point de vue sémantique échapper quelques caractères spécifiques dans une Expression Régulière, mais en fait, en souhaitant que le votre modèle en être interprétée littéralement: il y a une méthode pour le faire
#citation
est utilisé pour signifier que l':(à partir de la Javadoc lien ci-dessus)
Je recommande, dans ce cas, vous utilisez la commande suivante (argurably plus raisonnable et plus lisible):
Pattern.quote
au lieu de la norme.split("\\], [\\")
?Vous "doit" toujours utiliser
Pattern.quote
, parce que c'est l'équivalent de s'échapper de la chaîne regex vous-même... mais en utilisant cela, vous êtes sûr que vous n'oublierez pas n'importe quoi et en plus de ça, c'est plus lisible, à mon avis 🙂OriginalL'auteur ccjmne
Split reçoit une regex et [, ] les personnages ont de sens que dans l'expression rationnelle, de sorte que vous devrait leur échapper avec
\\[
et\\]
.La façon dont vous êtes en train de faire, l'analyseur trouve un ] sans précédent [ de sorte qu'il jette l'erreur.
OriginalL'auteur xp500
Chaîne.split() prend un expression régulière, pas normale chaîne comme argument. Dans une expression régulière, ] et [ sont des caractères spéciaux, qui doivent être précédés par des barres obliques inverses être pris à la lettre. Utilisation
.split("\\], \\[")
. (les doubles barres obliques inverses dire Java pour interpréter la chaîne comme "\], \[").OriginalL'auteur McLovin
Changer de
Il est bon de chercher une solution avant de l'envoyer sur 😉 Gardez à l'esprit que cette question est à propos de Java
OriginalL'auteur Marc B
Essayez de l'utiliser
OriginalL'auteur Skizzo