StringUtils基于正则表达式进行拆分

时间:2014-06-11 06:28:20

标签: java regex apache-stringutils

我有以下代码来分割我的输入字符串:

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

谁能告诉我为什么会这样?我能做些什么才能达到预期的产量?

3 个答案:

答案 0 :(得分:2)

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

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

您也可以使用标准Java和没有带String.split()的库和正则表达式获得相同的结果:

String result[] = input.split("\\|\\|");

答案 1 :(得分:1)

这是StringUtils.split的预期行为。此方法不会返回空结果。

查看更多:StringUtils::split(String, String) documentation

我的解决方案是:

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) documentation

答案 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]);
}