Recherche d'un moyen rapide et simple en Java pour changer cette chaîne
" hello there "
à quelque chose qui ressemble à ceci
"hello there"
où je remplace tous ces espaces multiples par un seul espace, sauf que je veux aussi que le ou les espaces au début de la chaîne disparaissent.
Quelque chose comme ça me fait en partie là
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
mais pas tout à fait.
Réponses:
Essaye ça:
Voir également
String.trim()
Aucun
trim()
regexIl est également possible de le faire avec un seul
replaceAll
, mais cela est beaucoup moins lisible que latrim()
solution. Néanmoins, il est fourni ici juste pour montrer ce que regex peut faire:Il y a 3 suppléants:
^_+
: toute séquence d'espaces au début de la chaîne$1
, qui capture la chaîne vide_+$
: toute séquence d'espaces à la fin de la chaîne$1
, qui capture la chaîne vide(_)+
: toute séquence d'espaces qui ne correspond à rien de ce qui précède, ce qui signifie qu'elle est au milieu$1
, qui capture un seul espaceVoir également
la source
trim()
, puisreplaceAll()
utilise moins de mémoire que de le faire dans l'autre sens. Pas beaucoup, mais si cela est appelé plusieurs fois, cela pourrait s'additionner, surtout s'il y a beaucoup de "blancs ajustables". (Trim()
ne se débarrasse pas vraiment de l'espace supplémentaire - il le masque simplement en déplaçant les valeurs de début et de fin. Le sous-jacentchar[]
reste inchangé.)( ) +
ou( ){2,}
devrait être (très) un peu plus efficace;)\\s
remplacera tout groupe d'espaces avec le caractère souhaité..trim().replaceAll(" +", " ")
(avec deux espaces) est plus rapide que.trim().replaceAll(" +", " ")
(avec un espace). J'ai effectué des tests de synchronisation sur des chaînes qui n'avaient que des espaces simples et tous des espaces doubles, et cela est arrivé beaucoup plus rapidement pour les deux lors de nombreuses opérations (des millions ou plus, selon l'environnement).Vous avez juste besoin d'un:
où vous faites correspondre un ou plusieurs espaces et les remplacez par un seul espace, puis coupez les espaces blancs au début et à la fin (vous pouvez en fait inverser en coupant d'abord puis en faisant correspondre pour rendre l'expression régulière plus rapide comme quelqu'un l'a souligné).
Pour tester cela rapidement, essayez:
et il renverra:
la source
Utilisez la
StringUtils.normalizeSpace(String str)
méthode Apache commons . Voir les documents icila source
Cela a parfaitement fonctionné pour moi:
sValue = sValue.trim().replaceAll("\\s+", " ");
la source
Cela correspondra à plus d'un espace.
PRODUCTION:
la source
Pour éliminer les espaces au début et à la fin de la chaîne, utilisez la
String#trim()
méthode. Et puis utilisez votremytext.replaceAll("( )+", " ")
.la source
Vous pouvez d'abord utiliser
String.trim()
, puis appliquer la commande regex replace sur le résultat.la source
Le code suivant compacte tout espace entre les mots et en supprime tout au début et à la fin de la chaîne
Cela produira
a string with many spaces, a tab and a newline
Notez que tous les caractères non imprimables, y compris les espaces, les tabulations et les nouvelles lignes seront compactés ou supprimés
Pour plus d'informations, consultez la documentation correspondante:
la source
Essaye celui-là.
Exemple de code
PRODUCTION
Tout d'abord, il remplacera tous les espaces par un seul espace. Que nous devons supposer faire le découpage,
String
car le début duString
et la fin duString
remplacera tout l'espace par un seul espace s'il yString
a des espaces au début duString
et à la fin duString
donc nous devons les découper. Que vous obtenez votre désirString
.la source
Vous pouvez également utiliser des contournements.
OU
<space>(?= )
correspond à un caractère espace qui est suivi d'un autre caractère espace. Donc, dans des espaces consécutifs, il correspondrait à tous les espaces sauf le dernier car il n'est pas suivi d'un caractère d'espace. Cela vous laisse un seul espace pour les espaces consécutifs après l'opération de suppression.Exemple:
la source
réduire()
Supprime uniquement les espaces de début et de fin.
À partir de Java Doc, "Renvoie une chaîne dont la valeur est cette chaîne, sans les espaces de début et de fin supprimés."
"D ev Dum my"
replace (), replaceAll ()
Remplace toutes les chaînes vides du mot,
Production:
Remarque: "\ s +" est l'expression régulière similaire au caractère d'espace vide.
Référence: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
la source
Beaucoup de réponses correctes ont été fournies jusqu'à présent et je vois beaucoup de votes positifs. Cependant, les manières mentionnées fonctionneront mais pas vraiment optimisées ou pas vraiment lisibles. J'ai récemment découvert la solution qui plaira à tous les développeurs.
Vous avez terminé. C'est une solution lisible.
la source
À Kotlin, cela ressemblerait à ceci
la source
réduire d'abord les espaces
mettre en majuscule la première lettre et tout le reste en minuscules
la source
la source
Cela a fonctionné pour moi
où le filtre est la fonction suivante et scan est la chaîne d'entrée:
la source
tu devrais le faire comme ça
mettre + entre parenthèses rondes.
la source
la source
Tu vois
String.replaceAll
.Utilisez l'expression régulière
"\s"
et remplacez-la par" "
.Ensuite, utilisez
String.trim
.la source
new String(" hello there ").trim().replaceAll("\\s+", " ")
vérifie ça...
Si String ne contient qu'un seul espace, replace () ne remplacera pas,
Si les espaces sont plus d'un, l'action Replace replace () effectue et supprime les espaces.
Pour compter le nombre d'espaces dans une chaîne.
Le motif .quote ("?") Renvoie le motif littéral String.
la source
Ma méthode avant de trouver la deuxième réponse en utilisant l'expression régulière comme meilleure solution. Peut-être que quelqu'un a besoin de ce code.
la source
\s
signifie dans les expressions régulières (espace, tabulation, nouvelle ligne, saut de page).Version Stream, filtre les espaces et les tabulations.
la source
la source
La méthode la plus simple pour supprimer les espaces blancs n'importe où dans la chaîne.
la source
La solution ci-dessus est l'algorithme avec la complexité de O (n) sans utiliser de fonction java.
la source
Veuillez utiliser le code ci-dessous
la source
Bonjour désolé pour le retard! Voici la réponse la meilleure et la plus efficace que vous recherchez:
Donc, votre sortie de cet exemple sera: Mon nom est kingkon.
Cependant, cette méthode supprimera également le "\ n" que peut contenir votre chaîne. Donc, si vous ne le souhaitez pas, utilisez simplement cette méthode simple:
Et si vous souhaitez également supprimer les espaces de début et de fin, ajoutez simplement:
la source
Je sais que la méthode replaceAll est beaucoup plus facile, mais je voulais également la publier.
la source
la source