文字列があり、その中のすべての改行を文字列" --linebreak-- "
に単純に置き換えたいと思います。
書くだけで十分ですか?
string = string.replaceAll("\n", " --linebreak-- ");
私はそれの正規表現の部分と混同しています。改行には2つのスラッシュが必要ですか?これで十分ですか?
正規表現を使用しないでください! _"\n"
_を置き換えるには、プレーンテキストの一致のみが必要です。
replace()
を使用して、リテラル文字列を別の文字列に置き換えます。
_string = string.replace("\n", " --linebreak-- ");
_
replace()
は、replaceAll()
と同様に、allの出現を置き換えることに注意してください。違いは replaceAll()
は正規表現を使用して検索します。
以下の正規表現を使用します。
s.replaceAll("\\r?\\n", " --linebreak-- ")
UNIXとWindows OSには、実際には2つの改行しかありません。
Java 8正規表現エンジンは\R
これは任意の行区切り文字を表します(詳細情報: https://stackoverflow.com/a/31060125/1393766 )。
Java 8にアクセスできる場合は、
string = string.replaceAll("\\R", " --linebreak-- ");
2 backslashes
は必要ありません。
String string = "hello \n world" ;
String str = string.replaceAll("\n", " --linebreak-- ");
System.out.println(str);
出力= hello --linebreak-- world
2つのバックスラッシュは本物だからです。
次のSOの質問で@dasblinkenlightの回答を参照してください(\ tについて話しますが、\ nにも適用されます):
Java、正規表現、正規表現でバックスラッシュをエスケープする必要がある
「エスケープシーケンスには2つの解釈があります。最初はJavaコンパイラーによるもの、次に正規表現エンジンによるものです。Javaコンパイラーが2つのスラッシュを見ると、スラッシュの後にtがある場合、Javaはそれをタブに置き換えます。ダブルスラッシュの後にある場合、Java =はそのままにします。ただし、2つのスラッシュが1つのスラッシュに置き換えられているため、正規表現エンジンは\ tを認識し、タブとして解釈します。」
新しい行にはプロパティがあります
System.getProperty("line.separator")
ここであなたの例については、
string.replaceAll("\n", System.getProperty("line.separator"));
いいね。 2つのバックスラッシュは必要ありません。
http://docs.Oracle.com/javase/6/docs/api/Java/util/regex/Pattern.html#sum