web-dev-qa-db-ja.com

javaの\ nと\ r \ nを<br />に置き換えます

これはいくつかの言語で何度も尋ねられていますが、動作させることができません。私はこのような文字列を持っています

_String str = "This is a string.\nThis is a long string.";
_

そして、私は_\n_を_<br />_で置き換えようとしています

_str = str.replaceAll("(\r\n|\n)", "<br />");
_

しかし_\n_は置き換えられていません。私はこれを使用してみました RegEx Tool 確認して同じ結果が表示されました。入力文字列は"(\r\n|\n)"に一致しません。私は何を間違えていますか?

62
Bala R

わたしにはできる。

public class Program
{
    public static void main(String[] args) {
        String str = "This is a string.\nThis is a long string.";
        str = str.replaceAll("(\r\n|\n)", "<br />");
        System.out.println(str);
    }
}

結果:

これは文字列です。<br />これは長い文字列です。

あなたの問題はどこかにあります。

112
Mark Byers

あなたがしようとしているもののもう少し堅牢なバージョン:

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");
19
Dolph

私にとって、これはうまくいきました:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");

ヒント:環境でコンパイルせずに迅速なテストを行うには、 regex tester を使用します

17
Nino van Hooff

私のアカウントは新しいので、Nino van Hooffの答えに賛成票を投じることはできません。ストリングがaspxベースのサーバーなどのWindowsベースのソースから来ている場合、このソリューションは機能します。

_rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");
_

ダブルスラッシュは単一のスラッシュエスケープ文字として解釈されるため、奇妙な文字セットの問題のようです。したがって、上記の4つのスラッシュの必要性。

繰り返しますが、ほとんどの状況で"(\\r\\n|\\n)"は動作するはずですが、文字列がWindowsベースのソースから来ている場合は上記を試してください。

ちょうどFYIで、これらの行末を置き換えていた問題を修正するためにすべてを試しました。最初は_Windows-1252_から_UTF-8_への変換に失敗したと考えられていました。しかし、それも機能しませんでした。このソリューションは、最終的にトリックをやったものです。 :)

8
user3798668

わたしにはできる。 Javaコードは、記述したとおりに機能します。テスターでは、入力文字列は次のようになります。

This is a string.
This is a long string.

...実際の改行付き。使用できません:

This is a string.\nThis is a long string.

...それは\nリテラルシーケンスバックスラッシュ 'n'

2
Alan Moore

それはうまくいくはずですが、それを理解しようとして自殺しないでください。 2パスを使用します。

str  = str.replaceAll("(\r\n)", "<br />");
str  = str.replaceAll("(\n)", "<br />");

免責事項:これはあまり効率的ではありません。

0
Byron Whitlock

これは動作するはずです。 2つのスラッシュを入れる必要があります

str = str.replaceAll("(\\r\\n|\\n)", "<br />");

この 参照 には、次の例を示す例があります。

private final String REGEX = "\\d"; // a single digit

多くのプロジェクトで2つのスラッシュを使用しましたが、うまくいくようです!

0
Kasturi