web-dev-qa-db-fra.com

Java Regex - Utilisation de la méthode replaceAll de String pour remplacer les sauts de ligne

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?

33
Tim

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.

52
Bohemian

Utilisez ci-dessous regex:

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

Il n'y a vraiment que deux nouvelles lignes pour UNIX et Windows OS.

35
kandarp

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-- ");
26
Pshemo

Pas besoin de 2 backslashes.

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

Sortie = hello --linebreak-- world

3
RanRag

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. "

2
Matt

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"));
1
JavaLearner

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

1
mikey