web-dev-qa-db-ja.com

括弧 "("でのGroovy / Java分割文字列

次のような分割を実行しようとしています:

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

出力:

[Hello , orld(1)]

この分割を実行したい:

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

しかし、私は見る:

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

この括弧をエスケープする方法はありますか?どんな助けも大歓迎です。

24
println "Hello World(1)".split("\\(");
54
Memento Mori

splitメソッドは、正規表現パターンを取ります。

「通常の文字列だけ」で分割する場合は、Pattern.quote最初に文字列を引用します。

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

Groovyのネイティブ正規表現構文を使用する場合、単一のエスケープを使用することもできます。

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

splitは正規表現を受け入れるだけなので、エスケープ文字として渡す必要があります。このためには、その前にバックスラッシュを追加する必要があります

\(

ただし、上記のような有効なエスケープ文字として解析されるため、上記のコンパイルエラーがあります。

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

そのため、2つのバックスラッシュで意味のない文字(括弧など)を渡す必要があります。

\\(

最後に:

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

または、Javaクラスの組み込み関数パターン名前付き引用

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

ブラケット文字を適切にエスケープする必要があります

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