我有以下代码来分割我的输入字符串:
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
谁能告诉我为什么会这样?我能做些什么才能达到预期的产量?
答案 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)
文档说,相邻的分隔符被视为一个分隔符
尝试使用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]);
}