【问题标题】:split method of class String ignores semicolon separators [duplicate]String类的split方法忽略分号分隔符[重复]
【发布时间】:2012-01-19 12:43:40
【问题描述】:

可能重复:
Java split() method strips empty strings at the end?

在 Java 中,我使用字符串拆分方法来拆分包含由分号分隔的值的字符串。

目前,我有以下行适用于所有情况的 99%。

String[] fields = optionsTxt.split(";");

当使用以下字符串时,一切都很完美:

"House;Car;Street;Place" => [House] [Car] [Street] [Place]

但是当我使用以下字符串时,split 方法会忽略最后两个分号。

"House;Car;;" => [House][Car]

怎么了?或者有什么解决办法?

【问题讨论】:

  • 第三个输出是空的吗?
  • 是的,“房子;汽车;;”应该导致 [House][Car][][]

标签: java split


【解决方案1】:

试试下面:

String[] = data.split(";", -1);

有关采用两个参数的 split 方法的详细信息,请参阅 Javadoc。

当调用String.split(String) 时,它调用String.split(String, 0) 并丢弃尾随的空字符串(正如文档所说),当使用n < 0 调用String.split(String, n) 时它不会丢弃任何东西。

【讨论】:

  • 是的! String[] = data.split(";");无法处理多个分号。添加 -1 解决了它!
【解决方案2】:

可以使用guava的Splitter

来自文档:

Splitter.on(',').split("foo,,bar, quux")

将返回 ["foo", "", "bar", " quux"] 的可迭代对象

【讨论】:

  • 我认为 OP 不想要 .trimResults().omitEmptyStrings();...
【解决方案3】:

Java API javadocs 中明确提到了这一点:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

“因此,结果数组中不包含尾随的空字符串。”

如果您想要空字符串,请尝试使用同一方法的双参数版本,第二个参数为负数:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String,%20int)

"如果 n 为非正数,则该模式将被应用尽可能多的次数,并且数组可以有任意长度。"

编辑:嗯,我的锚链接不起作用。

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 2014-03-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多