web-dev-qa-db-ja.com

区切り文字として空白文字を含む文字列を分割する方法を教えてください。

すべての空白文字( ''、 '\ t'、 '\ n'など)を区切り文字として使用し、文字列を部分文字列の配列に分割するためにJava.lang.String.split()メソッドに渡す必要がある正規表現パターンは何ですか?

527
mcjabberz

の行に何か

myString.split("\\s+");

これはすべての空白を区切り文字としてグループ化します。

だから私は文字列がある場合:

"Hello[space][tab]World"

これにより、文字列"Hello""World"が生成され、[space][tab]の間の空白が省かれます。

VonCが指摘したように、Javaは最初に文字列を特殊文字にエスケープし、 that を解析するように試みるので、バックスラッシュはエスケープするべきです。欲しいのは、リテラル"\s"です。つまり、"\\s"を渡す必要があります。少し混乱するかもしれません。

\\s[ \\t\\n\\x0B\\f\\r]と同等です

918
Henrik Paul

ほとんどの正規表現方言には、この種のことに使える便利な文字の要約がいくつかあります - これらは覚えておくと良いものです。

\w - 任意のWord文字と一致します。

\W - 単語以外の任意の文字と一致します。

\s - 空白文字と一致します。

\S - 空白文字以外のものと一致します。

\d - 任意の数字と一致します。

\D - 数字以外のものに一致します。

"Regex Cheatsheets"を検索すると、たくさんの役に立つサマリーが表示されます。

85
glenatron

これを機能させるには Javascript では、次のことを行う必要がありました。

myString.split(/\s+/g)
61
Mike Manard

"\\ s +"がうまくいくはずです

35
VonC

また、UniCodeの改行なしスペースxA0があります。

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
10
jake_astub
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
10
Arrow

Apache Commons Langには、空白文字を区切り文字として文字列を分割する方法があります。

StringUtils.split("abc def")

http://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html#split(Java.lang.String)

これは正規表現パターンよりも使いやすいかもしれません。

8
Felix Scheffer

String.split()をパラメータなしで言及している人が誰もいないのは驚きです。それが目的のものではないでしょうか。のように:

"abc def ghi".split()
2
Bill K

これは正規表現であり、カンマ、ドットなどのように空白で囲むことができる英数字以外の文字も必要ないと想定しています(たとえば、 "one、two"は[one] [two])。そのはず:

myString.split(/[\s\W]+/)
2
Rishabh
String str = "Hello   World";
String res[] = str.split("\\s+");
1
Olivia Liao

次の文を使用して、文字列を改行で分割することができます。

 String textStr[] = yourString.split("\\r?\\n");

次の文を使用して、文字列を空白で区切ることができます。

String textStr[] = yourString.split("\\s+");
1