Vous cherchez un moyen simple et rapide 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 souhaite également supprimer le ou les espaces au début de la chaîne.
Quelque chose comme ça m'amène en partie là
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
mais pas tout à fait.
Essaye ça:
String after = before.trim().replaceAll(" +", " ");
String.trim()
trim()
regexIl est également possible de le faire avec une seule replaceAll
, mais cela est beaucoup moins lisible que la solution trim()
. Néanmoins, il est fourni ici juste pour montrer ce que regex peut faire:
String[] tests = {
" x ", // [x]
" 1 2 3 ", // [1 2 3]
"", // []
" ", // []
};
for (String test : tests) {
System.out.format("[%s]%n",
test.replaceAll("^ +| +$|( )+", "$1")
);
}
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 ne correspondant à rien de ce qui précède, c'est-à-dire qu'elle est au milieu $1
, qui capture un seul espaceVous avez juste besoin d'un:
replaceAll("\\s{2,}", " ").trim();
où vous faites correspondre un ou plusieurs espaces et que vous les remplacez par un seul espace, puis ajustez les espaces au début et à la fin (vous pouvez en fait inverser d’abord en ajustant puis en faisant correspondre les espaces pour rendre la regex plus rapide, comme l’indique quelqu'un).
Pour tester ceci rapidement, essayez:
System.out.println(new String(" hello there ").trim().replaceAll("\\s{2,}", " "));
et il reviendra:
"hello there"
Utilisez la méthode Apache commons StringUtils.normalizeSpace(String str)
. Voir docs ici
Cela a parfaitement fonctionné pour moi: sValue = sValue.trim().replaceAll("\\s+", " ");
Pour éliminer les espaces au début et à la fin de la chaîne, utilisez la méthode String#trim()
. Et utilisez ensuite votre mytext.replaceAll("( )+", " ")
.
Vous pouvez d’abord utiliser String.trim()
, puis appliquer la commande regex replace au résultat.
Essaye celui-là.
Exemple de code
String str = " hello there ";
System.out.println(str.replaceAll("( +)"," ").trim());
SORTIE
hello there
Tout d'abord, tous les espaces seront remplacés par un seul espace. Alors nous devons supposer que nous ajustions String
car les débuts de String
et fin de String
remplacera tout l'espace par un seul espace si String
a des espaces au début de String
et fin de String
. Alors vous obtenez votre String
désirée.
"[ ]{2,}"
Cela correspondra à plus d'un espace.
String mytext = " hello there ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);
SORTIE:
hello there
Vous pouvez également utiliser des lookarounds.
test.replaceAll("^ +| +$|(?<= ) ", "");
OU
test.replaceAll("^ +| +$| (?= )", "")
<space>(?= )
correspond à un caractère espace suivi d'un autre caractère espace. Ainsi, 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:
String[] tests = {
" x ", // [x]
" 1 2 3 ", // [1 2 3]
"", // []
" ", // []
};
for (String test : tests) {
System.out.format("[%s]%n",
test.replaceAll("^ +| +$| (?= )", "")
);
}
Supprime uniquement les espaces de début et de fin.
De Java Doc, "Retourne une chaîne dont la valeur est cette chaîne, tous les espaces de début et de fin étant supprimés."
System.out.println(" D ev Dum my ".trim());
"D ev Dum mon"
Remplace toutes les chaînes vides de la Parole,
System.out.println(" D ev Dum my ".replace(" ",""));
System.out.println(" D ev Dum my ".replaceAll(" ",""));
System.out.println(" D ev Dum my ".replaceAll("\\s+",""));
Sortie:
"DevDummy"
"DevDummy"
"DevDummy"
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
Bonjour désolé pour le retard! Voici la réponse optimale et efficace que vous recherchez:
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;
public class MyPatternReplace {
public String replaceWithPattern(String str,String replace){
Pattern ptn = Pattern.compile("\\s+");
Matcher mtch = ptn.matcher(str);
return mtch.replaceAll(replace);
}
public static void main(String a[]){
String str = "My name is kingkon. ";
MyPatternReplace mpr = new MyPatternReplace();
System.out.println(mpr.replaceWithPattern(str, " "));
}
Votre sortie de cet exemple sera donc: Je m'appelle kingkon.
Cependant, cette méthode supprimera également le "\ n" que votre chaîne peut avoir. Donc, si vous ne voulez pas utiliser cette méthode simple:
while (str.contains(" ")){ //2 spaces
str = str.replace(" ", " "); //(2 spaces, 1 space)
}
Et si vous souhaitez également supprimer les espaces de début et de fin, ajoutez simplement:
str = str.trim();
Cela a fonctionné pour moi
scan= filter(scan, " [\\s]+", " ");
scan= sac.trim();
où filter est la fonction suivante et scan est la chaîne d'entrée:
public String filter(String scan, String regex, String replace) {
StringBuffer sb = new StringBuffer();
Pattern pt = Pattern.compile(regex);
Matcher m = pt.matcher(scan);
while (m.find()) {
m.appendReplacement(sb, replace);
}
m.appendTail(sb);
return sb.toString();
}
tu devrais le faire comme ça
String mytext = " hello there ";
mytext = mytext.replaceAll("( +)", " ");
mettre + à l'intérieur des crochets ronds.
String str = " hello world"
réduire les espaces d'abord
str = str.trim().replaceAll(" +", " ");
mettre en majuscule la première lettre et tout le reste en minuscule
str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();
Ma méthode avant que je trouve la deuxième réponse en utilisant regex comme une meilleure solution. Peut-être que quelqu'un a besoin de ce code.
private String replaceMultipleSpacesFromString(String s){
if(s.length() == 0 ) return "";
int timesSpace = 0;
String res = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == ' '){
timesSpace++;
if(timesSpace < 2)
res += c;
}else{
res += c;
timesSpace = 0;
}
}
return res.trim();
}
Version en streaming, filtre les espaces et les onglets.
Stream.of(str.split("[ \\t]")).filter(s -> s.length() > 0).collect(Collectors.joining(" "))
Le code suivant compactera tous les espaces entre les mots et supprimera ceux au début et à la fin de la chaîne
String input = "\n\n\n a string with many spaces, \n"+
" a \t tab and a newline\n\n";
String output = input.trim().replaceAll("(\\s)+", " ");
System.out.println(output);
Ceci 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, voir la documentation correspondante:
vérifie ça...
public static void main(String[] args) {
String s = "A B C D E F G\tH I\rJ\nK\tL";
System.out.println("Current : "+s);
System.out.println("Single Space : "+singleSpace(s));
System.out.println("Space count : "+spaceCount(s));
System.out.format("Replace all = %s", s.replaceAll("\\s+", ""));
// Example where it uses the most.
String s = "My name is yashwanth . M";
String s2 = "My nameis yashwanth.M";
System.out.println("Normal : "+s.equals(s2));
System.out.println("Replace : "+s.replaceAll("\\s+", "").equals(s2.replaceAll("\\s+", "")));
}
Si String ne contient qu'un seul espace, replace () ne sera pas remplacé,
Si les espaces sont plusieurs, l'action replace () remplit et supprime spacess.
public static String singleSpace(String str){
return str.replaceAll(" +| +|\t|\r|\n","");
}
Compter le nombre d'espaces dans une chaîne.
public static String spaceCount(String str){
int i = 0;
while(str.indexOf(" ") > -1){
//str = str.replaceFirst(" ", ""+(i++));
str = str.replaceFirst(Pattern.quote(" "), ""+(i++));
}
return str;
}
Pattern . Quote ("?") Renvoie un modèle littéral String.
Voir String.replaceAll
.
Utilisez l'expression régulière "\s"
et remplacez-la par " "
.
Ensuite, utilisez String.trim
.
Je sais que la méthode replaceAll est beaucoup plus facile, mais je voulais aussi la poster.
public static String removeExtraSpace(String input) {
input= input.trim();
ArrayList <String> x= new ArrayList<>(Arrays.asList(input.split("")));
for(int i=0; i<x.size()-1;i++) {
if(x.get(i).equals(" ") && x.get(i+1).equals(" ")) {
x.remove(i);
i--;
}
}
String Word="";
for(String each: x)
Word+=each;
return Word;
}