web-dev-qa-db-fra.com

Chaîne divisée Groovy/Java entre parenthèses "("

J'essaie d'effectuer une scission semblable à celle-ci:

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

Sortie:

[Hello , orld(1)]

Je veux effectuer cette scission:

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

Mais je vois:

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

Y at-il un moyen que je puisse échapper à ces parenthèses? Toute aide est appréciée.

24
Kyle - Microsoft
println "Hello World(1)".split("\\(");
52
Memento Mori

La méthode split utilise un modèle d'expression régulière.

Si vous voulez scinder "juste une chaîne normale", vous pouvez utiliser Pattern.quote pour la citer en premier

println "Hello World(1)".split(Pattern.quote("("))
19
Jon Skeet

Vous pouvez également utiliser un seul échap lorsque vous utilisez la syntaxe groovy native regex:

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

vous devez échapper correctement le caractère crochet

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

Depuis que split accepte seulement les expressions rationnelles, vous devez le passer comme caractère échappé. Pour cela, vous devez ajouter une barre oblique inverse devant celui-ci.

\(

Mais above est une erreur de compilation car il est analysé comme un caractère d'échappement valide tel que:

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

Donc, vous devez passer un caractère sans signification (par exemple, une parenthèse) avec 2 barres obliques inverses:

\\(

Finalement:

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

OU vous pouvez aussi tout faire en fonction de la fonction intégrée de la classe Pattern named quote :

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