Jawaban:
Seperti ini:
yourString = yourString.replaceAll("\\s+", " ");
Sebagai contoh
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
output
lorem ipsum dolor sit.
Apa artinya itu \s+
?
\s+
adalah ekspresi reguler. \s
cocok dengan spasi, tab, baris baru, carriage return, umpan form atau tab vertikal, dan +
mengatakan "satu atau lebih dari itu". Dengan demikian kode di atas akan menciutkan semua "ruang kosong spasi" lebih lama dari satu karakter, dengan karakter ruang tunggal.
\s+
tetapi apa artinya 2 backslash \\?
"\\"
mewakili string yang terdiri dari backslash tunggal. Jadi untuk mewakili \s+
Anda menulis "\\s+"
.
Anda bisa menggunakan regex
(\s)\1
dan
gantikan dengan $1
.
Kode Java:
str = str.replaceAll("(\\s)\\1","$1");
Jika inputnya "foo\t\tbar "
Anda akan mendapatkan "foo\tbar "
sebagai output
Tetapi jika input "foo\t bar"
itu akan tetap tidak berubah karena tidak memiliki karakter spasi spasi berturut-turut.
Jika Anda memperlakukan semua karakter spasi (spasi, tab vertikal, horisontal tab, carriage return, bentuk pakan, baris baru) sebagai ruang maka Anda dapat menggunakan regex berikut untuk mengganti setiap jumlah ruang putih berturut-turut dengan satu ruang:
str = str.replaceAll("\\s+"," ");
Tetapi jika Anda ingin mengganti dua spasi putih berturut-turut dengan satu ruang yang harus Anda lakukan:
str = str.replaceAll("\\s{2}"," ");
Coba ini - Anda harus import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Di mana string
string Anda di mana Anda perlu menghapus duplikat spasi putih
hai tercepat (tapi bukan cara tercantik) yang saya temukan adalah
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
ini berjalan cukup cepat di android berlawanan dengan regex
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Meskipun sudah terlambat, saya telah menemukan solusi yang lebih baik (yang bekerja untuk saya) yang akan menggantikan semua spasi putih yang sama berturut-turut dengan satu spasi putih dari tipenya. Itu adalah:
Hello!\n\n\nMy World
akan
Hello!\nMy World
Perhatikan masih ada ruang putih utama dan tertinggal. Jadi solusi lengkap saya adalah:
str = str.trim().replaceAll("(\\s)+", "$1"));
Di sini, trim()
ganti semua string ruang putih terkemuka dan tertinggal dengan "". (\\s)
untuk menangkap \\s
(yaitu spasi putih seperti '', '\ n', '\ t') di grup # 1 . +
tanda untuk mencocokkan 1 atau lebih token sebelumnya. Jadi (\\s)+
dapat berupa karakter berurutan (1 atau lebih) di antara karakter spasi putih tunggal ('', '\ n' atau '\ t'). $1
adalah untuk mengganti string yang cocok dengan string grup # 1 (yang hanya berisi 1 karakter spasi putih) dari jenis yang cocok (yaitu karakter spasi tunggal putih yang telah cocok). Solusi di atas akan berubah seperti ini:
Hello!\n\n\nMy World
akan
Hello!\nMy World
Saya belum menemukan solusi di atas di sini jadi saya telah mempostingnya.
Jika Anda ingin menyingkirkan semua spasi putih asing yang mengarah dan tertinggal maka Anda ingin melakukan sesuatu seperti ini:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Kemudian Anda dapat menghapus duplikat menggunakan strategi lain yang tercantum di sini:
string = string.replaceAll("\\s+"," ");
Ini dapat dimungkinkan dalam tiga langkah: