Come rimuovere gli spazi bianchi duplicati (incluse le schede, le nuove righe, gli spazi, ecc ...) in una stringa usando Java?
Come rimuovere gli spazi bianchi duplicati (incluse le schede, le nuove righe, gli spazi, ecc ...) in una stringa usando Java?
Risposte:
Come questo:
yourString = yourString.replaceAll("\\s+", " ");
Per esempio
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
uscite
lorem ipsum dolor sit.
Che cosa \s+significa?
\s+è un'espressione regolare. \scorrisponde a uno spazio, scheda, nuova riga, ritorno a capo, avanzamento modulo o scheda verticale e +indica "uno o più di questi". Pertanto, il codice precedente comprime tutte le "sottostringhe di spazi bianchi" più lunghe di un carattere, con un singolo carattere di spazio.
Fonte: Java: rimozione di spazi bianchi duplicati nelle stringhe
\s+ma cosa significa 2 barra rovesciata \\?
"\\"rappresenta la stringa costituita da una singola barra rovesciata. Quindi per rappresentarti \s+scrivi "\\s+".
Puoi usare la regex
(\s)\1
e
sostituirlo con $1.
Codice Java:
str = str.replaceAll("(\\s)\\1","$1");
Se l'input è "foo\t\tbar ", otterrai "foo\tbar "come output,
ma se l'input è "foo\t bar", rimarrà invariato perché non ha caratteri spazi bianchi consecutivi.
Se trattate tutti i caratteri degli spazi bianchi (spazio, scheda verticale, scheda orizzontale, ritorno a capo, avanzamento modulo, nuova riga) come spazio, potete utilizzare la seguente regex per sostituire qualsiasi numero di spazio bianco consecutivo con un singolo spazio:
str = str.replaceAll("\\s+"," ");
Ma se vuoi sostituire due spazi bianchi consecutivi con uno spazio singolo dovresti fare:
str = str.replaceAll("\\s{2}"," ");
Prova questo: devi farlo import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Dov'è la stringtua stringa su cui devi rimuovere gli spazi bianchi duplicati
ciao il modo più veloce (ma non più grazioso) che ho trovato è
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
questo funziona abbastanza velocemente su Android al contrario di una regex
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Anche se è troppo tardi, ho trovato una soluzione migliore (che funziona per me) che sostituirà tutti gli spazi bianchi consecutivi dello stesso tipo con uno spazio bianco del suo tipo. Questo è:
Hello!\n\n\nMy World
sarà
Hello!\nMy World
Si noti che ci sono ancora spazi bianchi iniziali e finali. Quindi la mia soluzione completa è:
str = str.trim().replaceAll("(\\s)+", "$1"));
Qui, trim()sostituisce tutte le stringhe di spazi bianchi iniziali e finali con "". (\\s)serve per catturare \\s(ovvero spazi bianchi come '', '\ n', '\ t') nel gruppo # 1 . +il segno serve per abbinare 1 o più token precedenti. Quindi (\\s)+possono essere caratteri consecutivi (1 o più) tra qualsiasi singolo carattere di spazio bianco ('', '\ n' o '\ t'). $1serve per sostituire le stringhe corrispondenti con la stringa del gruppo n. 1 (che contiene solo 1 carattere di spazio bianco) del tipo di corrispondenza (ovvero il singolo carattere di spazio bianco corrispondente). La soluzione sopra cambierà in questo modo:
Hello!\n\n\nMy World
sarà
Hello!\nMy World
Non ho trovato la mia soluzione sopra qui, quindi l'ho pubblicata.
Se vuoi sbarazzarti di tutti gli spazi bianchi estranei principali e finali, allora vuoi fare qualcosa del genere:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Quindi puoi rimuovere i duplicati usando le altre strategie elencate qui:
string = string.replaceAll("\\s+"," ");
Ciò può essere possibile in tre passaggi: