【问题标题】:java String split functionjava字符串拆分函数
【发布时间】:2016-08-24 09:09:55
【问题描述】:

public String\[\] split(String regex)的java文档中

我们可以找到例子:

例如,字符串"boo:and:foo" 使用这些表达式产生以下结果

正则表达式          结果

o                   { "b", "", ":and:f" }

第二个结果"" 是从哪里来的?介于boo 之间,还是oo:and:f

【问题讨论】:

  • 这会返回两个字符串,'b',':and:f',但是为什么找不到原点''?我知道“+”意味着“o”必须至少出现一次
  • @DavidPérezCabrera 如果使用 split("o+", -1),则返回三个字符串,'b'、':and:f' 和 '',不知道会发生什么... .为什么最后一个''被计算在内但'o''o'之间的''不被计算?

标签: java string split


【解决方案1】:

当您使用分隔符o 并且有两个分隔符彼此相邻时,它会产生一个空字符串。因此,例如,如果您有一个字符串 foo::bar 并将其与 : 拆分,您将得到 {"foo", "", "bar"},因为拆分时 :: 之间的空格被视为空字符串。

如果您想在没有任何空字符串的情况下进行拆分,请查看this question

结束空字符串?

当 split 被赋予零或没有限制参数时,它会丢弃尾随的空字段

参考:Java: String split(): I want it to include the empty strings at the end

【讨论】:

  • 那么最后一个oo呢? .最后没有空字符串token。
  • @omkarsirra 是的,最后的空字符串会掉下来(看看这个关于它的一些深入讨论stackoverflow.com/questions/13939675/…
【解决方案2】:

请注意,对于正则表达式引擎,字符之间的位置也很重要。因此,正则表达式引擎将boo:and:foo 字符串视为

<EMPTY>b<EMPTY>o<EMPTY>o<EMPTY>:<EMPTY>a<EMPTY>n<EMPTY>d<EMPTY>:<EMPTY>f<EMPTY>o<EMPTY>o<EMPTY>
               ^between^                                                       ^between^

由于第一个 ^between^ 不在字符串末尾,split 在结果中保留空位置(字符串)。由于int limit 参数默认为0,尾随的空元素将作为结尾删除。如果您传递-1(非正值),则所有尾随空元素都将出现在结果数组中。请参阅String#split 参考。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多