webentwicklung-frage-antwort-db.com.de

ersetzen Sie\n und\r\n durch <br /> in Java

Dies wurde mehrmals nach mehreren Sprachen gefragt, aber ich kann es nicht zum Laufen bringen ... Ich habe eine solche Zeichenfolge

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

Und ich versuche, den \n durch <br /> zu ersetzen

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

aber der \n wird nicht ersetzt .. Ich habe versucht, dieses RegEx Tool zu verwenden, um zu überprüfen, und ich sehe dasselbe Ergebnis. Die Eingabezeichenfolge hat keine Übereinstimmung für "(\r\n|\n)". Was mache ich falsch ?

61
Bala R

Für mich geht das.

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);
    }
}

Ergebnis:

 Dies ist eine Zeichenfolge. <br /> Dies ist eine lange Zeichenfolge .

Dein Problem ist woanders.

111
Mark Byers

Eine etwas robustere Version von dem, was Sie versuchen:

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

Für mich hat das funktioniert:

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

Tipp: Verwenden Sie regex tester zum schnellen Testen, ohne in Ihrer Umgebung zu kompilieren

16
Nino van Hooff

Da mein Konto neu ist, kann ich Nino van Hooffs Antwort nicht zustimmen. Wenn Ihre Zeichenfolgen aus einer Windows-basierten Quelle stammen, z. B. einem ASPX-Server, funktioniert diese Lösung:

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

Scheint ein seltsames Zeichensatzproblem zu sein, da die doppelten Backslashes als Escape-Zeichen für einen einzelnen Slash interpretiert werden. Daher die Notwendigkeit der vierfachen Schrägstriche oben.

In den meisten Fällen sollte "(\\r\\n|\\n)" funktionieren, aber wenn Ihre Zeichenfolgen aus einer Windows-basierten Quelle stammen, versuchen Sie es mit dem obigen.

Nur eine FYI versuchte alles, um das Problem zu beheben, das ich hatte, um diese Zeilenenden zu ersetzen. Zuerst dachte ich daran, dass die Konvertierung von Windows-1252 in UTF-8 fehlgeschlagen ist. Aber das hat auch nicht funktioniert. Diese Lösung hat letztendlich den Trick geleistet. :)

8
user3798668

Für mich geht das. Der Java-Code funktioniert genauso wie Sie ihn geschrieben haben. Im Tester sollte die Eingabezeichenfolge lauten:

This is a string.
This is a long string.

... mit einem echten Linefeed. Sie können nicht verwenden:

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

... weil es \n als wörtliche Sequenz Backslash 'n' behandelt.

2
Alan Moore

Das sollte funktionieren, aber bring dich nicht um, es herauszufinden. Benutze einfach 2 Pässe.

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

Haftungsausschluss: Dies ist nicht sehr effizient.

0
Byron Whitlock

Das sollte funktionieren. Sie müssen zwei Schrägstriche einfügen

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

In dieser Referenz gibt es ein Beispiel, das zeigt

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

Ich habe in vielen meiner Projekte zwei Schrägstriche verwendet und es scheint gut zu funktionieren!

0
Kasturi