Yanıtlar:
Bunun gibi:
yourString = yourString.replaceAll("\\s+", " ");
Örneğin
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
çıktılar
lorem ipsum dolor sit.
Bu ne anlama \s+geliyor?
\s+düzenli bir ifadedir. \sboşluk, sekme, yeni satır, satır başı, form feed'i veya dikey sekme ile eşleşir ve +"bunlardan biri veya daha fazlası" der. Böylece, yukarıdaki kod tek bir boşluk karakteri ile tüm "boşluk alt dizelerini" bir karakterden daha uzun bir şekilde daraltır.
\s+ama 2 ters eğik çizgi \\ ne anlama geliyor?
"\\"değeri, tek bir ters eğik çizgiden oluşan dizeyi temsil eder. Yani temsil etmek \s+için yaz "\\s+".
Normal ifadeyi kullanabilirsiniz
(\s)\1
ve
ile değiştirin $1.
Java kodu:
str = str.replaceAll("(\\s)\\1","$1");
Girdi çıktı olarak "foo\t\tbar "elde edilecekse Ancak girdi ardışık boşluk karakterleri olmadığı için girdi değişmeden kalacaktır."foo\tbar ""foo\t bar"
Tüm boşluk karakterlerini (boşluk, dikey sekme, yatay sekme, satır başı, form beslemesi, yeni satır) boşluk olarak görürseniz, ardışık herhangi bir sayıda beyaz alanı tek bir boşlukla değiştirmek için aşağıdaki normal ifadeyi kullanabilirsiniz :
str = str.replaceAll("\\s+"," ");
Ancak iki ardışık beyaz boşluğu tek bir boşlukla değiştirmek istiyorsanız yapmanız gerekir:
str = str.replaceAll("\\s{2}"," ");
Bunu deneyin - import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
stringYinelenen beyaz boşlukları kaldırmanız gereken dizeniz nerede
merhaba bulduğum en hızlı (ama en güzel yol değil)
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
Bu bir regex ters android oldukça hızlı çalışıyor
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Çok geç olmasına rağmen, aynı ardışık tüm beyaz boşlukları kendi türünde bir beyaz boşluk ile değiştirecek daha iyi bir çözüm buldum (benim için işe yarıyor). Yani:
Hello!\n\n\nMy World
olacak
Hello!\nMy World
Hala önde ve arkada beyaz boşluklar olduğuna dikkat edin. Benim tam çözümüm:
str = str.trim().replaceAll("(\\s)+", "$1"));
Burada, trim()tüm önde gelen ve arkadaki boşluk dizelerini "" ile değiştirir. grup 1'de ( '', '\ n', '\ t' gibi beyaz boşluklar) (\\s)yakalamak içindir . işareti, 1 veya daha fazla önceki simgeyi eşleştirmek içindir. Bu nedenle , herhangi bir beyaz boşluk karakteri ('', '\ n' veya '\ t') arasında ardışık karakterler (1 veya daha fazla) olabilir. eşleşen dizeleri eşleşen tipte (yalnızca 1 beyaz boşluk karakteri içeren) grup 1 dizesiyle (eşleşen tek beyaz boşluk karakteri) değiştirmek içindir. Yukarıdaki çözüm şu şekilde değişecektir:\\s+(\\s)+$1
Hello!\n\n\nMy World
olacak
Hello!\nMy World
Yukarıdaki çözümümü burada bulamadım, bu yüzden gönderdim.
Tüm önde gelen ve sondaki yabancı boşluklardan kurtulmak istiyorsanız, böyle bir şey yapmak istersiniz:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Ardından, burada listelenen diğer stratejileri kullanarak kopyaları kaldırabilirsiniz:
string = string.replaceAll("\\s+"," ");
Bu üç adımda mümkün olabilir: