web-dev-qa-db-fra.com

Remplacer une nouvelle ligne/retourner par un espace en utilisant regex

Jolie question de base pour quelqu'un qui sait.

Au lieu d'obtenir de

"This is my text. 

And here is a new line"

À:

"This is my text. And here is a new line"

Je reçois:

"This is my text.And here is a new line.

Une idée pourquoi?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s");

Je pense avoir trouvé le coupable.

Sur la ligne suivante, je fais ce qui suit:

L.replaceAll( "[^a-zA-Z0-9|^!|^?|^.|^\\s]", "");

Et cela semble causer mon problème.

Une idée pourquoi?

J'essaie évidemment de faire ce qui suit: supprimer tous les caractères autres que les caractères et supprimer toutes les nouvelles lignes.

26
jason m

\s est un raccourci pour les caractères d'espacement dans regex. Cela n'a pas de sens dans une chaîne. ==> Vous ne pouvez pas l'utiliser dans votre chaîne de remplacement. Là vous devez mettre exactement le (s) caractère (s) que vous voulez insérer. S'il s'agit d'un espace, utilisez simplement " " en remplacement.

L'autre chose est: Pourquoi utilisez-vous 3 barres obliques inverses comme séquence d'échappement? Deux suffisent en Java. Et vous n'avez pas besoin d'un | (opérateur d'alternance) dans une classe de caractères.

L.replaceAll("[\\t\\n\\r]+"," ");

Remarque

L n'est pas changé. Si vous voulez avoir un résultat, vous devez faire

String result =     L.replaceAll("[\\t\\n\\r]+"," ");

Code de test:

String in = "This is my text.\n\nAnd here is a new line";
System.out.println(in);

String out = in.replaceAll("[\\t\\n\\r]+"," ");
System.out.println(out);
49
stema

Essayer

L.replaceAll("(\\t|\\r?\\n)+", " ");

Selon le système, un saut de ligne est soit \r\n, soit simplement \n.

7
Keppil

J'ai trouvé this .

String newString = string.replaceAll("\n", " ");

Bien que, comme vous avez une double ligne, vous aurez un double espace. Je suppose que vous pourriez alors faire un autre tout remplacer pour remplacer les espaces doubles par un seul.

Si cela ne fonctionne pas, essayez de:

string.replaceAll(System.getProperty("line.separator"), " ");

Si je crée des lignes dans "chaîne" en utilisant "\ n", je devais utiliser "\ n" dans la regex. Si j'ai utilisé System.getProperty (), je devais l'utiliser.

3
TikkaBhuna

Votre regex est bonne, bien que je la remplace par la chaîne vide

String resultString = subjectString.replaceAll("[\t\n\r]", "");

Vous attendez un espace entre "texte". et "Et" non?

J'obtiens cet espace quand j'essaie l'expression régulière en copiant votre échantillon

"This is my text. "

Donc tout va bien ici. Peut-être que si vous le remplacez simplement par la chaîne vide, cela fonctionnera. Je ne sais pas pourquoi vous le remplacez par\s. Et l'alternance | n'est pas nécessaire dans une classe de personnage.

2
buckley

Le nouveau séparateur de ligne est différent pour différents systèmes d’exploitation - "\ r\n" pour Windows et "\ n" pour Linux.

Pour plus de sécurité, vous pouvez utiliser le modèle regex\R - l’agenda de changement de ligne introduit avec Java 8 :

String inlinedText = text.replaceAll("\\R", " ");
1
Dimitar II