想象一下你有:
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";
有一个简单的正确方法吗?
想象一下你有:
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";
有一个简单的正确方法吗?
使用重载方法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" }
Iterable<String> bits = Splitter.on(';').split(string);
如果您希望它省略空字符串,您只需使用:
Iterable<String> bits = Splitter.on(';').omitEmptyStrings().split(string);
没有讨厌的隐式正则表达式,一切都按照它在锡上所说的那样做。好多了:)
在现实生活中,我可能会创建一次拆分器作为静态最终变量。(如果您认为为了单个类而导入 Guava 是多余的,请查看库的其余部分。它非常有用 - 没有它我不想在 Java 中开发。)
您只需要在 split 函数中包含第二个参数,这是您在拆分之间接受的最少字符数,在您的情况下为 0。
所以调用应该是这样的:
String[] split = string.split(";", 0);
使用 0 的限制来丢弃尾随的空字符串,或者使用负值来保留它们。在此处查找文档:Javadoc