Supprimer tous les espaces de Chaîne mais garder UN saut de ligne
J'ai cette Chaîne d'entrée (contenant des onglets, des espaces, retours à la ligne ():
That is a test.
seems to work pretty good? working.
Another test again.
[Edit]: je devrais avoir fourni à la Chaîne pour mieux tester comme stackoverflow supprime tous les caractères spéciaux (onglets, ...)
String testContent = "\n\t\n\t\t\t\n\t\t\tDas ist ein Test.\t\t\t \n\tsoweit scheint das \t\tganze zu? funktionieren.\n\n\n\n\t\t\n\t\t\n\t\t\t \n\t\t\t \n \t\t\t\n \tNoch ein Test.\n \t\n \t\n \t";
Et je veux arriver à cet état:
That is a test.
seems to work pretty good? working.
Another test again.
String expectedOutput = "Das ist ein Test.\nsoweit scheint das ganze zu? funktionieren.\nNoch ein Test.\n";
Des idées? Cela peut être réalisé en utilisant des regexes?
replaceAll("\\s+", " ")
n'est PAS ce que je cherche. Si cette expression serait de conserver exactement 1 saut de ligne et de celles existantes, il serait parfait.
J'ai essayé ceci mais cela semble sous-optimaux pour moi...:
BufferedReader bufReader = new BufferedReader(new StringReader(testContent));
String line = null;
StringBuilder newString = new StringBuilder();
while ((line = bufReader.readLine()) != null) {
String temp = line.replaceAll("\\s+", " ");
if (!temp.trim().equals("")) {
newString.append(temp.trim());
newString.append("\n");
}
}
je pense que vous devez faire un peu de logique pour que.. vous avez besoin de rechercher un caractère hors espace après le 1er de l'espace. et de recherche pour les non caractère d'espace après la nouvelle ligne..
Quelle est la logique que vous voulez? Le parage des espaces consécutifs de 1 espace?
oui cela résume tout je pense..
pas que ce n'est pas de supprimer des onglets et ne s'effondre pas tous les retours à la ligne à seul ceux
Quelle est la logique que vous voulez? Le parage des espaces consécutifs de 1 espace?
oui cela résume tout je pense..
pas que ce n'est pas de supprimer des onglets et ne s'effondre pas tous les retours à la ligne à seul ceux
OriginalL'auteur friesoft | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Dans une seule expression régulière (plus un petit patch pour les onglets):
La regex semble effrayant, mais en fait se décompose bien dans ces pièces qui sont OU-ed ensemble:
^\s+
– match des espaces blancs au début;\s+$
– match des espaces blancs à la fin;\s*(\n)\s*
– match espaces contenant un saut de ligne, et la capture de cette nouvelle ligne;(\s)\s*
– match d'espaces, de la capture de la première caractère espace.Le résultat sera un match avec deux groupes de capture, mais seulement l'un des groupes peut être non-vide à la fois. Cela me permet de remplacer le match avec
"$1$2"
, qui signifie "concaténer les deux groupes de capture."Le seul problème restant est que je ne peux pas remplacer un onglet avec un espace à l'aide de cette approche, j'ai donc corrigé cela avec un simple non-regex caractère de remplacement.
null
après chaque chaîne. ideone.com/Oui3t0OriginalL'auteur Marko Topolnik
En 4 étapes:
Les seuls problèmes que ma solution a été: laissant de l'espace à la fin de la ligne si il y avait des espaces de là, et en le laissant seul saut de ligne en début/fin si la chaîne avait tous les retours à la ligne. J'ai juste corrigé (enfin j'espère :))
OriginalL'auteur MBO
Tout d'abord remplacer tous les nouvelles lignes avec une nouvelle ligne, puis remplacez le espaces mais pas de nouvelles lignes, dernière chose, vous devez supprimer tous les espaces blancs depuis le début de la chaîne:
De sortie:
OriginalL'auteur Maroun
Si je comprends bien, vous voulez simplement de remplacer une succession de retours à la ligne avec un retour à la ligne. Remplacez donc
\n\n*
avec\n
(avec les drapeaux). Si il y a beaucoup d'espaces dans les lignes, il suffit de supprimer les espaces (^\s\s*$
avec mode multi-lignes) d'abord, puis de remplacer les retours à la ligne.Edit:
Le seul problème ici est que certains retours à la ligne pourrait rester ici et là, de sorte que vous devez être prudent premier effondrement des espaces, puis fixer la ligne vide de problème. Vous pouvez couper plus bas dans probablement une seule regex, mais il est plus facile à lire, avec ces trois:
OriginalL'auteur wds
Pourquoi ne pas vous faire
N'oubliez pas https://softwareengineering.stackexchange.com/questions/10998/what-does-the-jamie-zawinskis-quotation-about-regular-expressions-mean
"xx\n \n\n yy"
?eh bien, ça dépend si vous avez besoin de garder les lignes vides ou les supprimer..
Êtes-vous sûr que vous les lisez, OP question?
Je l'ai fait, mais on dirait que ça a changé par la suite...
Je suis désolé, mais stackoverflow supprimé tous les caractères spéciaux et transformé ces espaces. Par conséquent, j'ai juste ajouté les Chaînes contenant tous les caractères spéciaux.
OriginalL'auteur denis.solonenko