web-dev-qa-db-ja.com

配列へのJava分割文字列

split()メソッドについて助けが必要です。私はStringを持っています:

String values = "0|0|0|1|||0|1|0|||";

値を配列に入れる必要があります。 3つの可能な文字列があります: "0"、 "1"、および ""

私の問題は、私がsplit()を使用しようとしたときです。

String[] array = values.split("\\|"); 

私の値は最後の0まで保存されます。 "|||"の部分のようですトリミングされます。何が悪いの?

ありがとう

85
Dusan

この振る舞いは String.split(String regex) (強調しているところ)に明示的に文書化されています。

このメソッドは、与えられた式とlimit引数にゼロを指定して2引数のsplitメソッドを呼び出すのと同じように機能します。末尾の空の文字列は、結果として得られる配列にが含まれないです。

末尾の空の文字列を含める場合は、2番目のパラメータ(limit)に負の値を指定して String.split(String regex, int limit) を使用する必要があります。

String[] array = values.split("\\|", -1);
127
Mark Rotteveel

これを試して

String[] array = values.split("\\|",-1); 
25
Lokesh

この例を考えてください。

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (Java.util.Arrays.toString(testString.split("\\|")));
    // output : [Real, How, To]
  }
}

結果には、 "|"の間に空の文字列は含まれません。セパレータ空の文字列を保持するには

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (Java.util.Arrays.toString(testString.split("\\|", -1)));
    // output : [Real, How, To, , , ]
  }
}

詳細については、このWebサイトを参照してください。 http://www.rgagnon.com/javadetails/Java-0438.html

8
S. Mayol

これは予想通りです。 splitについては Javadocs を参照してください。

Splits this string around matches of the given regular expression.

このメソッドは、2つの引数を持つsplit(Java.lang.String、int)メソッドを、指定された式とlimit引数にゼロを指定して呼び出すのと同じように機能します。 したがって、末尾の空文字列は結果の配列に含まれません。

1
Srinivas