区切り文字として空白文字を含む文字列を分割する方法


555

どのような正規表現パターンに渡す私を必要とする java.lang.String.split() すべての空白文字(使用したサブストリングの配列に文字列を分割するために' ''\t''\n'区切り文字として、など)?

回答:


955

の何か

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

これにより、すべての空白が区切り文字としてグループ化されます。

だから私が文字列を持っている場合:

"Hello[space][tab]World"

これは、文字列が得られるはず"Hello""World"の間の空きスペースを省略[space]して[tab]

VonCが指摘したように、Javaは最初に文字列を特殊文字にエスケープして、解析するために送信するため、バックスラッシュはエスケープする必要があります。あなたが望むのは、リテラル"\s"です"\\s"。つまり、渡す必要があります。少し混乱することがあります。

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


1
そのリマインダーをありがとう。私はヒップからコーディングしていました:)
Henrik Paul

34
trim()最初に行う必要があることに注意してくださいtrim().split("\\s++")。-それ以外の場合、たとえば、 `abc`を分割すると、2つの空の文字列が最初に出力されます。
Marcus Junius Brutus 14

回答の終わり近くで4つのバックスラッシュを使用したのはなぜですか?すなわち。"\\\\s"
Michael Borkowski、2015年

"" .trim()。split( "\\ s +")-空の文字列分割により、長さは1になります。 "term" .trim()。split( "\\ s +")-長さも1になります。
PaulSchell

88

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

\w -任意の単語文字に一致します。

\W -任意の非単語文字に一致します。

\s -任意の空白文字に一致します。

\S -空白文字以外に一致します。

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

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

"Regex Cheatsheets"を検索すると、便利な要約がたくさん表示されます。




64

これをJavaScriptで機能せるために、私は次のことをしなければなりませんでした:

myString.split(/\s+/g)

15
これはJavaScriptです。私も注意を払っていませんでした:)
miracle2k

14
おっとっと。私の間違い。たぶん、この回答は、Javascriptの回答を探しているときに、このスレッドに出くわす他の人を助けるでしょう。:-)
Mike Manard、2012

はははJavaScriptの答えを探していたところ、この質問に偶然出会い、それから出かける前にあなたの答えに気づきました。+1。
クリス、2014

それは素晴らしいことです!この答えが間違った質問に答えたとしても、誰かに役立つことがわかってうれしいです。:-)
Mike Manard、2014年

これは、サーバーの引数を分割する必要があることにも非常に役立ちました:)
ProgrammerPlays

36

「\\ s +」はトリックを実行する必要があります


1
なぜ最後に+があるのですか?
Floella、2016年

4
@Anarelleは、スペース文字のキャプチャを少なくとも1回、可能な限り何度も繰り返します。https://regex101.com/r/dT7wG9/1 またはhttp://rick.measham.id.au/paste/explainを参照してください。 pl?regex = \ s%2Bまたはhttp://regexper.com/#^s%2Bまたはhttp://www.myezapp.com/apps/dev/regexp/show.ws?regex=\s+&env= env_java
VonC

11

また、UniCodeの改行なしスペースxA0がある場合もあります...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

これは私を助けます!
Surasin Tancharoen 2017

10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@Stephan私はそれらを見ませんでした。
Arrow


2

これは正規表現であり、uは、空白で囲むことができるコンマ、ドットなどの非英数字文字も必要としないと想定しているため(たとえば、「one、two」は[one] [two]を与える必要があります)、そのはず:

myString.split(/[\s\W]+/)

1

次のステートメントを使用して、改行によって文字列を分割できます。

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

次のステートメントを使用して、空白で文字列を分割できます。

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


-1

このコードを研究してください。

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}

答えを詳しく教えてください。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.