30 votes

Groovy/Java divise la chaîne de caractères sur les parenthèses "("

J'essaie d'effectuer un fractionnement similaire au suivant :

println "Hello World(1)".split("W");

Sortie :

[Hello , orld(1)]

Je veux effectuer ce fractionnement :

println "Hello World(1)".split("(");

Mais je vois :

Caught: java.util.regex.PatternSyntaxException: Unclosed group near index 1 (

Existe-t-il un moyen d'échapper à ces parenthèses ? Toute aide est la bienvenue.

67voto

Memento Mori Points 1657
println "Hello World(1)".split("\\(");

23voto

Jon Skeet Points 692016

En split prend un motif d'expression régulière.

Si vous souhaitez effectuer un découpage sur "une simple chaîne de caractères", vous pouvez utiliser Pattern.quote pour citer la chaîne en premier :

println "Hello World(1)".split(Pattern.quote("("))

1voto

Vous devez échapper correctement au caractère de parenthèse

println "Hello World(1)".split("\\(")

1voto

Will P Points 6355

Vous pouvez également utiliser un seul échappement lorsque vous utilisez la syntaxe native des expressions rationnelles de Groovy :

assert "Hello World(1)".split(/\(/) == ["Hello World", "1)"]

1voto

user659077 Points 46

Desde diviser n'accepte que les regex, vous devez lui passer un caractère échappé. Pour cela, vous devez ajouter une barre oblique inverse devant le caractère.

\(

Mais ci-dessus, il y a une erreur de compilation parce qu'il est analysé comme un caractère échappé valide tel que :

\t Tab
\n New Line or Line Feed
\r Carriage Return

Vous devez donc passer un caractère non signifiant (par exemple une parenthèse) avec deux barres obliques inverses :

\\(

Enfin :

println "Hello World(1)".split("\\(");

OU vous pouvez également faire tout cela avec la fonction java intégrée à la classe Modèle nommée citation :

println "Hello World(1)".split(Pattern.quote("("));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X