Javaを使用して文字列から重複する空白(タブ、改行、スペースなどを含む)を削除するにはどうすればよいですか?
このような:
yourString = yourString.replaceAll("\\s+", " ");
例えば
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
出力
lorem ipsum dolor sit.
\s+
はどういう意味ですか?
\s+
は正規表現です。 \s
は、スペース、タブ、改行、キャリッジリターン、フォームフィード、または垂直タブに一致し、+
は「これらの1つ以上」と言います。したがって、上記のコードは、1文字より長いすべての「空白部分文字列」を、単一のスペース文字で折りたたみます。
ソース: Java:文字列内の重複する空白の削除
正規表現を使用できます
(\s)\1
そして
$1
に置き換えます。
Javaコード:
str = str.replaceAll("(\\s)\\1","$1");
入力が"foo\t\tbar "
の場合、出力として"foo\tbar "
を取得します
ただし、入力が"foo\t bar"
の場合、連続する空白文字がないため、入力は変更されません。
すべての空白文字(スペース、垂直タブ、水平タブ、キャリッジリターン、フォームフィード、改行)をスペースとして扱う場合、次の正規表現を使用してany連続する空白の数を置き換えることができます単一のスペース:
str = str.replaceAll("\\s+"," ");
ただし、2つの連続した空白を単一のスペースに置き換える場合は、次のようにする必要があります。
str = str.replaceAll("\\s{2}"," ");
こんにちは最速(しかし最もきれいな方法ではない)が見つかりました
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
これは正規表現とは反対にAndroidでかなり高速に実行されています
これを試してください-あなたはimport Java.util.regex.*;
する必要があります
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
string
は、重複する空白を削除する必要がある文字列です
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()
は、先頭と末尾のすべての空白文字列を ""に置き換えます。 (\\s)
は、group#1で\\s
( ''、 '\ n'、 '\ t'などの空白)をキャプチャするためのものです。 +
記号は、1つ以上の先行トークンを照合するためのものです。したがって、(\\s)+
は、任意の単一の空白文字( ''、 '\ n'、または '\ t')の中の連続した文字(1つ以上)にすることができます。 $1
は、一致する文字列をgroup#1文字列(1つの空白文字のみを含む)の一致するタイプ(一致した単一の空白文字)で置き換えるためのものです。上記のソリューションは次のように変更されます。
Hello!\n\n\nMy World
なります
Hello!\nMy World
ここで上記の解決策を見つけていないので、投稿しました。
また、任意のスペース、タブ、改行、その他すべてにString Tokenizerを使用することもできます。簡単な方法は、
String s = "Your Text Here";
StringTokenizer st = new StringTokenizer( s, " " );
while(st.hasMoreTokens())
{
System.out.print(st.nextToken());
}
すべての先行および後続の無関係な空白を削除する場合は、次のような操作を行います。
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
次に、ここにリストされている他の戦略を使用して重複を削除できます。
string = string.replaceAll("\\s+"," ");