文字列をスペースで分割する方法


329

文字列をスペースで区切る必要があります。このために私は試しました:

str = "Hello I'm your String";
String[] splited = str.split(" ");

しかし、それは機能していないようです。


3
よさそうです...「分割」配列の値は何ですか?
npinti '26年

1
あなたのコードは実際にそのまま動作します。IdeOne.comで実行中のコードをご覧ください。
バジル

@BasilBourque-そのリンクに実行ボタンが見つかりませんでした
nanosoft

1
@nanosoft IdeOne.comのページはロード時に自動的に実行されます。stdoutセクションのコードの下の出力を参照してください。コードを変更するには、fork左上隅近くのリンクをクリックします。
バジルブルク

回答:


639

あなたが持っているものはうまくいくはずです。ただし、提供されたスペースがデフォルトである場合...他の何か?空白の正規表現を使用できます。

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

これにより、任意の数の連続したスペースが文字列をトークンに分割します。

ちなみに、「分割」が単語であるかどうかはわかりません:)分割の犠牲者である状態も「分割」だと思います。それはそれらのトリッキーな文法のことの1つです:-)うるさいことをしようとせずに、私がそれを渡すと思っただけです!


45
私はあなたが何を期待していたスイス人です、私の英語は最高ではありません; P、とにかくそれはうまくいった!
サファリ'10

29
:-)ねえ、それは大きくありません。私はいくつかのとんでもない変数名を使用しました(コードではおそらく実行させるべきではありません!)私は文法ナチやその他のことをしようとしているのではなく、ちょっとした雑学を渡しただけです。
corsiKa

7
@サファリ、あなたはちょうど1の価格で2つの素晴らしいアドバイスを受けました。すばらしい答えです。
Nirmal Mangal 2014

8
「何をすべきか」私のコードが壊れたとき、私はよく似たようなことを言います。
グリフィン

1
私のユースケースは文字列を分割して複数のスペースを削除することだったので、私はそれが便利だと思います。1行のコードで両方を実行できます。
Niharika Upadhyay 2018

87

受け入れられた答えは良いですが、入力文字列が空白で始まる場合、先頭の空の文字列になってしまうことに注意してください。たとえば、次のようにします。

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

結果は次のようになります。

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

そのため、分割する前に文字列をトリミングすることをお勧めします。

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");

29

正規表現をstr.splitかっこで囲むことで問題が解決すると私は確信しています。JavaのString.split()メソッドは正規表現に基づいているため、必要なものは次のとおりです。

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");

12

Stringutils.split()文字列を白人のペースで分割するために使用します。たとえば、StringUtils.split("Hello World")「Hello」と「World」を返します。

言及されたケースを解決するために、我々はこのような分割方法を使用します

String split[]= StringUtils.split("Hello I'm your String");

分割した配列を出力すると、出力は次のようになります。

こんにちは

私は

きみの

ストリング

デモの完全な例については、こちらを確認してください



6

何らかの方法で文字列分割メソッドを使用したくない場合は、JavaでStringTokenizerクラスを使用できます。

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }

ArrayIndexOutofBounds例外をスローする可能性があります。
Ajay Takur 2014

2
いいえ、これは「ArrayIndexOutofBounds」をスローしません。これは、文字列で見つかったトークンの数に従って配列サイズを宣言しているためです。これにより、配列のサイズが文字列で受信したトークンを超えないようになります。
Muhammad Suleman 2014

6

これをお試しください

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);

4

別の方法は次のとおりです。

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

ここで


3

さて、あなたはすでにあなたが私がそれを一般化するだろうという答えを得たので、分割をしなければなりません。

スペースで文字列を分割する場合は、区切り文字(特殊文字)を使用します。

まず、問題のほとんどを作成しているため、先頭のスペースを削除します。

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

最初に、スペースやタブなどの先頭のスペースを削除します。

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

ここで、スペースまたは特殊文字で分割したい場合。

String[] sa = s.split("[^\\w]+");//split by any non word char

ただし、wには[a-zA-Z_0-9]が含まれるため、アンダースコア(_)で分割したい場合も使用します

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space

それreplaceAll("^\\s+","")は私の日を救った。それは私の場合にはうまくいきました。ありがとう
Kostas Asargiotakis

2

以下の非常に単純な例:

それが役に立てば幸い。

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String

1

以下のコードを使用して文字列を分割できます

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"

0

これは、「、」または空白を含む文字列をトリムする方法です

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }

0

これらの回答が投稿されてからしばらく経っているので、ここで、求められていることを行うための別の現在の方法を示します。

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

これで文字列のリストができました(これはおそらく配列よりも優れています)。配列が必要な場合は、output.toArray(new String[0]);


0

空白だけでなく、私の解決策は見えない文字も解決します。

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");

-1

スペースで文字列を吐き出すのは簡単

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.