2013-03-05 10 views
19

を文字列を分割私は、次の類似したスプリットを実行しようとしています:Groovyの/ Javaは、 "(" 括弧に

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

出力:

[Hello , orld(1)] 

私はこの分割を実行したい:

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

しかし、わかりました:

​​

このカッコをエスケープする方法はありますか?どんな助けもありがとうございます。

+1

あなたはこのようにそれをエスケープする必要があり、 '\\('動作しませんエスケープ – ant

+1

@ant –

+1

ごめんなさいダブルバックスラッシュ – ant

答えて

40
println "Hello World(1)".split("\\("); 
+0

それは私のために、ありがとう!私はただ一つの\ –

17

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

あなたは「普通の文字列」に分割したい場合は、最初の文字列を引用するPattern.quoteを使用することができます。

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

または\\( "'、\\( '\ 'に' \( 'をエスケープすると正規表現エンジンは\リテラル括弧 – jedyobidan

+0

これは興味深い..私はこの状況でPattern.quote()を使うことについて考えなかった。良い答えJon –

+0

@jedyobidan:まさにそれは 'Pattern.quote'がやることです - それはあなたが手動で行う必要がないことを意味します... –

0

あなたが適切

println "Hello World(1)".split("\\(") 
1
ブラケット文字をエスケープする必要があります

groovyのネイティブregex構文を使用する場合は、1つのエスケープを使用することもできます。

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

分割は正規表現を受け入れるだけなので、エスケープ文字として渡す必要があります。このために、あなたはそれ

\(

の前にバックスラッシュを追加しかし、上記の、有効なのような文字をエスケープとして解析されているため、コンパイルエラーを持っている必要があります。だから、

\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("("));