3

あなたが持っていると想像してください:

String string = "A;B;;D";
String[] split = string.split(";");

結果を次のようにしたい:

split[0] = "A";
split[1] = "B";
split[2] = "";
split[3] = "D";

しかし、結果は次のとおりです。

split[0] = "A";
split[1] = "B";
split[2] = "D";

これに対する簡単な適切な方法はありますか?

4

3 に答える 3

12

オーバーロードされたメソッドを使用しますsplit(String regex, int limit):

String string = "A;B;;D";
String[] split = string.split(";", -1);

ドキュメントから:

The string "boo:and:foo", for example, yields the following results with these parameters:

    Regex   Limit   Result
    :   2   { "boo", "and:foo" }
    :   5   { "boo", "and", "foo" }
    :   -2  { "boo", "and", "foo" }
    o   5   { "b", "", ":and:f", "", "" }
    o   -2  { "b", "", ":and:f", "", "" }
    o   0   { "b", "", ":and:f" }
于 2012-07-31T22:58:17.117 に答える
4

個人的にはGuavaSplitterクラスを使用します:

Iterable<String> bits = Splitter.on(';').split(string);

空の文字列を省略したい場合は、次のようにします。

Iterable<String> bits = Splitter.on(';').omitEmptyStrings().split(string);

厄介な暗黙の正規表現はなく、すべてが缶に書かれていることを行います。ずっといい:)

実際には、スプリッターを静的な最終変数として1 回作成することになるでしょう。(単一のクラスのために Guava をインポートするのはやり過ぎだと考えている場合は、ライブラリの残りの部分を見てください。これは信じられないほど便利です。これなしでは Java で開発したくありません。)

于 2012-07-31T22:57:00.100 に答える
0

分割関数に2番目のパラメーターを含める必要があります。これは、分割間で受け入れる文字の最小量であり、この場合は0です。

したがって、呼び出しは次のようになります。

String[] split = string.split(";", 0);

末尾の空の文字列を破棄するには0の制限を使用し、それらを保持するには負の値を使用します。ここでドキュメントを検索します:Javadoc

于 2012-07-31T23:01:11.873 に答える