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

文档说,相邻的分隔符被视为一个分隔符

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 回答
2

您正在寻找的方法是StringUtils.splitByWholeSeparatorPreserveAllTokens()

String result[] = StringUtils.splitByWholeSeparatorPreserveAllTokens(input, "||");

您也可以使用标准 Java 实现相同的结果,而无需使用String.split()正则表达式的库:

String result[] = input.split("\\|\\|");
于 2014-06-11T06:43:09.250 回答
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 回答