J'ai une chaîne et je voudrais simplement remplacer tous les retours à la ligne par la chaîne " --linebreak-- "
.
Serait-ce suffisant d'écrire simplement:
string = string.replaceAll("\n", " --linebreak-- ");
Je suis confus avec la partie regex de celui-ci. Ai-je besoin de deux barres obliques pour la nouvelle ligne? Est-ce assez bon?
N'utilisez pas l'expression régulière! . Vous n'avez besoin que d'une correspondance en texte brut pour remplacer "\n"
.
Utilisez replace()
pour remplacer une chaîne littérale par une autre:
string = string.replace("\n", " --linebreak-- ");
Notez que replace()
remplace toujours all occurrences, tout comme replaceAll()
- la différence est que replaceAll()
= utilise l'expression régulière pour rechercher.
Utilisez ci-dessous regex:
s.replaceAll("\\r?\\n", " --linebreak-- ")
Il n'y a vraiment que deux nouvelles lignes pour UNIX et Windows OS.
Depuis Java 8 moteur regex prend en charge \R
qui représente n'importe quel séparateur de ligne (peu plus d'informations: https://stackoverflow.com/a/31060125/1393766 ).
Donc, si vous avez accès à Java 8, vous pouvez utiliser
string = string.replaceAll("\\R", " --linebreak-- ");
Pas besoin de 2 backslashes
.
String string = "hello \n world" ;
String str = string.replaceAll("\n", " --linebreak-- ");
System.out.println(str);
Sortie = hello --linebreak-- world
Il suffit d'ajouter cela pour être complet, car la chose 2 barre oblique inverse est réelle.
Reportez-vous à la réponse @dasblinkenlight dans la question suivante SO (en parlant de\t mais cela s'applique également à\n)):
Java, expression régulière, besoin d'échapper à la barre oblique inverse dans l'expression régulière
"Il y a deux interprétations de séquences d'échappement en cours: d'abord par le compilateur Java, puis par le moteur d'expression régulière. Lorsque Java voit deux barres obliques, il les remplace par une seule barre oblique. Lorsqu'il n'y a pas de barre oblique, Java la remplace par un onglet; lorsqu'il y a une barre oblique suivante, Java = le laisse seul. Cependant, comme deux barres obliques ont été remplacées par une seule barre oblique, le moteur d'expression rationnelle voit\t et l'interprète comme un onglet. "
pour la nouvelle ligne il y a une propriété
System.getProperty("line.separator")
Ici comme pour votre exemple,
string.replaceAll("\n", System.getProperty("line.separator"));
Cela semble bon. Vous ne voulez pas de 2 barres obliques inverses.
http://docs.Oracle.com/javase/6/docs/api/Java/util/regex/Pattern.html#sum