回答:
このような:
yourString = yourString.replaceAll("\\s+", " ");
例えば
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
出力
lorem ipsum dolor sit.
それは\s+
どういう意味ですか?
\s+
正規表現です。\s
スペース、タブ、改行、キャリッジリターン、フォームフィード、または垂直タブに一致し、+
「それらの1つ以上」と言います。したがって、上記のコードは、1つの空白文字で、1文字より長いすべての「空白部分文字列」を折りたたみます。
\s+
が、2つのバックスラッシュ\\はどういう意味ですか?
"\\"
は、単一のバックスラッシュで構成される文字列を表します。だから\s+
あなたを表すために書く"\\s+"
。
あなたは正規表現を使うことができます
(\s)\1
そして
に置き換えてください$1
。
Javaコード:
str = str.replaceAll("(\\s)\\1","$1");
入力の場合、出力として"foo\t\tbar "
取得さ"foo\tbar "
れますが
、入力の場合、"foo\t bar"
連続する空白文字がないため、入力は変更されません。
すべての空白文字(スペース、垂直タブ、水平タブ、キャリッジリターン、フォームフィード、改行)をスペースとして扱う場合は、次の正規表現を使用して、任意の数の連続する空白を1つのスペースに置き換えることができます。
str = str.replaceAll("\\s+"," ");
ただし、連続する2つの空白を1つのスペースに置き換える場合は、次のようにします。
str = str.replaceAll("\\s{2}"," ");
こんにちは私が見つけた最速の(しかし、最もきれいな方法ではありません)
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
これは正規表現とは逆にAndroidでかなり高速に実行されています
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
手遅れですが、同じタイプの連続するすべての空白をそのタイプの1つの空白に置き換えるより良い解決策(私にとってはうまくいく)を見つけました。あれは:
Hello!\n\n\nMy World
になります
Hello!\nMy World
まだ前後に空白があることに注意してください。だから私の完全な解決策は:
str = str.trim().replaceAll("(\\s)+", "$1"));
ここでtrim()
は、先頭と末尾のすべての空白文字列を "" に置き換えます。グループ#1の(\\s)
キャプチャ\\s
(つまり、 ''、 '\ n'、 '\ t'などの空白)です。記号は、1つ以上の先行トークンに一致するためのものです。したがって、単一の空白文字(「」、「\ n」、または「\ t」)の中で連続した文字(1つ以上)を使用できます。一致する文字列を、一致するタイプ(つまり、一致した単一の空白文字)のグループ#1文字列(1つの空白文字のみを含む)で置き換えるためのものです。上記のソリューションは次のように変更されます。+
(\\s)+
$1
Hello!\n\n\nMy World
になります
Hello!\nMy World
上記の解決策が見つからなかったので、投稿しました。
これは次の3つのステップで可能です。