web-dev-qa-db-ja.com

Java Regex-文字列のreplaceAllメソッドを使用して改行を置き換える

文字列があり、その中のすべての改行を文字列" --linebreak-- "に単純に置き換えたいと思います。

書くだけで十分ですか?

string = string.replaceAll("\n", " --linebreak-- ");

私はそれの正規表現の部分と混同しています。改行には2つのスラッシュが必要ですか?これで十分ですか?

33
Tim

正規表現を使用しないでください! _"\n"_を置き換えるには、プレーンテキストの一致のみが必要です。

replace() を使用して、リテラル文字列を別の文字列に置き換えます。

_string = string.replace("\n", " --linebreak-- ");
_

replace()は、replaceAll()と同様に、allの出現を置き換えることに注意してください。違いは replaceAll() は正規表現を使用して検索します。

52
Bohemian

以下の正規表現を使用します。

 s.replaceAll("\\r?\\n", " --linebreak-- ")

UNIXとWindows OSには、実際には2つの改行しかありません。

35
kandarp

Java 8正規表現エンジンは\Rこれは任意の行区切り文字を表します(詳細情報: https://stackoverflow.com/a/31060125/1393766 )。

Java 8にアクセスできる場合は、

string = string.replaceAll("\\R", " --linebreak-- ");
26
Pshemo

2 backslashesは必要ありません。

 String string = "hello \n world" ;
 String str = string.replaceAll("\n", " --linebreak-- ");
 System.out.println(str);

出力= hello --linebreak-- world

3
RanRag

2つのバックスラッシュは本物だからです。

次のSOの質問で@dasblinkenlightの回答を参照してください(\ tについて話しますが、\ nにも適用されます):

Java、正規表現、正規表現でバックスラッシュをエスケープする必要がある

「エスケープシーケンスには2つの解釈があります。最初はJavaコンパイラーによるもの、次に正規表現エンジンによるものです。Javaコンパイラーが2つのスラッシュを見ると、スラッシュの後にtがある場合、Javaはそれをタブに置き換えます。ダブルスラッシュの後にある場合、Java =はそのままにします。ただし、2つのスラッシュが1つのスラッシュに置き換えられているため、正規表現エンジンは\ tを認識し、タブとして解釈します。」

2
Matt

新しい行にはプロパティがあります

System.getProperty("line.separator")

ここであなたの例については、

string.replaceAll("\n", System.getProperty("line.separator"));
1
JavaLearner

いいね。 2つのバックスラッシュは必要ありません。

http://docs.Oracle.com/javase/6/docs/api/Java/util/regex/Pattern.html#sum

1
mikey