【问题标题】:String split behaviour on empty string and on single delimiter string空字符串和单个分隔符字符串上的字符串拆分行为
【发布时间】:2011-12-30 17:16:44
【问题描述】:

这是this question的后续行动。

问题在下面的第二行。

"".split("x");   //returns {""}   // ok
"x".split("x");  //returns {}   but shouldn't it return {""} because it's the string before "x" ?
"xa".split("x"); //returns {"", "a"}    // see?, here "" is the first string returned
"ax".split("x"); //returns {"a"}

【问题讨论】:

  • SI-5096“当分隔符出现在字符串末尾时,split() 中的错误”
  • 这就是 Google Guava 创建 com.google.common.base.Splitter 的原因

标签: java scala


【解决方案1】:

不,因为根据the relevant javadoc“尾随空字符串将被丢弃”。

【讨论】:

  • 那为什么不在第一行丢弃呢? (在空字符串上拆分)
  • 这应该理解为“结果数组末尾的空字符串将被丢弃”。
  • 我猜它将空字符串视为第一个标记,然后在它之后拆分,所以从技术上讲它是一个领先的空字符串
  • 再次,来自 JavaDoc:“如果表达式与输入的任何部分都不匹配,则结果数组只有一个元素,即这个字符串。”也许它并不一致,但它按承诺工作。
【解决方案2】:

根据String.split(..) 使用的java.util.regex.Pattern source

"".split("x");   // returns {""} - valid - when no match is found, return the original string
"x".split("x");  // returns {} - valid - trailing empty strings are removed from the resultant array {"", ""}
"xa".split("x"); // returns {"", "a"} - valid - only trailing empty strings are removed
"ax".split("x"); // returns {"a"} - valid - trailing empty strings are removed from the resultant array {"a", ""}

【讨论】:

  • 所以它的行为是正确的,因为它调用的方法......行为是这样的?我想知道当我用这样的论点结束下一个错误报告时,我的老板会说什么。
  • @Kim Stebel,SO 既不是 bugtracker,我也不应该为它修复 bug。这篇文章基本上要求澄清,而不是解决方案,我只是试图说明为什么split 方法会这样。放轻松。
【解决方案3】:

要包含尾随的空字符串,请使用 split 的其他实现。

"".split("x", -1);   // returns {""} - valid - when no match is found, return the original string
"x".split("x", -1);  // returns {"", ""} - valid - trailing empty strings are included in the resultant array {"", ""}
"xa".split("x", -1); // returns {"", "a"} - valid
"ax".split("x", -1); // returns {"a", ""} - valid - trailing empty strings are included in the resultant array {"a", ""}

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多