1

入力文字列を分割する次のコードがあります。

import org.apache.commons.lang.StringUtils;

public class SplitTest {

    public static void main(String args[]) {
        String input = "A||B||||D||E";
        String result[] = StringUtils.split(input, "||");

        for (int i = 0; i < result.length; i++) {
            System.out.println("result[" + i + "]:" + result[i]);
        }
    }
}

そして、私は次のような出力を期待していました:

期待される出力:

 result[0]:A
 result[1]:B
 result[2]:
 result[3]:D
 result[4]:E

実際の出力:

result[0]:A
result[1]:B
result[2]:D
result[3]:E

なぜこれが起こっているのか誰にも教えてもらえますか?期待される出力を達成するにはどうすればよいですか?

4

3 に答える 3

2

ドキュメントによると、隣接するセパレーターは1つのセパレーターとして扱われます

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String, java.lang.String)

代わりに StrTokenizer を使用してみてください

String input = "A||B||||D||E";
StrTokenizer tokenizer = new StrTokenizer(input, "||");
tokenizer.setIgnoreEmptyTokens(false);

for (int i = 0; i < tokenizer .getTokenArray().length; i++) {
    System.out.println("result[" + i + "]:" + tokenizer.getTokenArray()[i]);
}
于 2014-06-11T06:41:44.727 に答える
1

これは の予想される動作ですStringUtils.split。このメソッドは空の結果を返しません。

詳細を参照してください: StringUtils::split(String, String) のドキュメント

私の解決策は次のとおりです。

public class SplitTest {

  public static void main(String args[]) {
    String input = "A||B||||D||E";
    String result[] = input.split("[|]{2}");

    for (int i = 0; i < result.length; i++) {
      System.out.println("result[" + i + "]:" + result[i]);
    }
  }
}

または:

StringUtils::splitByWholeSeparatorPreserveAllTokens(String, String) ドキュメント

于 2014-06-11T06:39:04.210 に答える