2016-05-19 29 views
0

私は少しの例で私の問題を説明しようとします。 バージョン1とバージョン2を実装しましたが、目的の結果が得られませんでした。 replaceAllメソッドでどの置換パラメータを使用して目的の結果を得る必要がありますか?String.replaceAll()と n改行

バージョン1:

String s = "TEST"; 
s = s.replaceAll("TEST", "TEST\nTEST"); 
System.out.println(s); 

出力:

TEST

TEST



バージョン2:

String s = "TEST"; 
s = s.replaceAll("TEST", "TEST\\nTEST"); 
System.out.println(s); 

出力:

TESTnTEST



所望の出力:

TEST \ NTES javadoc of String#replaceAll(String, String)からT

答えて

6

注置換 ストリングにおけるバックスラッシュ(\)とドル記号($)は、結果は、それが のように扱われていた場合よりも異なることが生じる可能性があることをリテラル置換文字列。 Matcher.replaceAllを参照してください。必要に応じて、 Matcher.quoteReplacement(java.lang.String)を使用して、これらの文字の特殊な意味を抑止します( )。

s = s.replaceAll("TEST", Matcher.quoteReplacement("TEST\\nTEST")); 

\は、文字列リテラルのmetacharあるとしてあなたはまだ、2バックスラッシュを必要としています。

  • あなたが\として、\でそれをエスケープする必要があり、出力
  • で1 \は、置換文字列のためのmetacharであるとします:\\あなたはまた、Matcher.quoteReplacementせずに4つのバックスラッシュを使用することができます


  • \との両方でエスケープする必要があります。\は文字列リテラルのメタ文字です:\\\\
s = s.replaceAll("TEST", "TEST\\\\nTEST"); 
2

replaceAll()を使用しないでください!

replaceAll()正規表現検索を行い、交換するが、あなたのタスクは、正規表現を必要としません - ちょうどプレーンテキストバージョンreplace()を使用し、すべての出現を置き換えます。

String s = "TEST"; 
s = s.replace("TEST", "TEST\\nTEST"); 
System.out.println(s); 

出力:

TEST\nTEST 

あなたはJavaの文字列リテラルに2つのバックスラッシュとして符号化されるリテラルのバックスラッシュが必要です
関連する問題