3

想象一下你有:

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";

有一个简单的正确方法吗?

4

3 回答 3

12

使用重载方法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" }
于 2012-07-31T22:58:17.117 回答
4

我个人会使用GuavaSplitter课程:

Iterable<String> bits = Splitter.on(';').split(string);

如果您希望它省略空字符串,您只需使用:

Iterable<String> bits = Splitter.on(';').omitEmptyStrings().split(string);

没有讨厌的隐式正则表达式,一切都按照它在锡上所说的那样做。好多了:)

在现实生活中,我可能会创建一次拆分器作为静态最终变量。(如果您认为为了单个类而导入 Guava 是多余的,请查看库的其余部分。它非常有用 - 没有它我不想在 Java 中开发。)

于 2012-07-31T22:57:00.100 回答
0

您只需要在 split 函数中包含第二个参数,这是您在拆分之间接受的最少字符数,在您的情况下为 0。

所以调用应该是这样的:

String[] split = string.split(";", 0);

使用 0 的限制来丢弃尾随的空字符串,或者使用负值来保留它们。在此处查找文档:Javadoc

于 2012-07-31T23:01:11.873 回答