【问题标题】:Java split returns white spaces in resultJava split 在结果中返回空格
【发布时间】:2017-02-06 15:42:00
【问题描述】:

我在这个字符串上使用了“split”函数:

p(80,2)

我只想获得这两个数字,所以我就是这样做的:

String[] split = msg.msgContent().split("[p(,)]")

正则表达式是正确的(或者至少,我认为是这样),因为它将两个数字分开并将它们放入向量“split”中,但事实证明这个向量的长度为 4,前两个位置被空白占据。
事实上,如果我打印每个向量位置,结果是这样的:

Split:


80
2 

我尝试将 \\s 添加到正则表达式以匹配空格,但由于我的字符串中没有空格,所以它不起作用。

【问题讨论】:

  • 1.正则表达式对于拆分 2 不正确。您不应使用拆分
  • @anubhava 我应该用什么来代替拆分?
  • 注意:它们不是空格。它们是空字符串。字符串开头和p 之间有一个空字符串,p( 之间有一个空字符串。
  • “向量”是指数组。

标签: java regex split


【解决方案1】:

这里不需要split,只需使用简单的正则表达式从字符串中提取数字即可:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(msg.msgContent());
while (m.find()) {
     String number = m.group();
     // add to array
}

请注意,String#split 采用正则表达式,而您传递的正则表达式与您要查找的模式不匹配。

您可能想阅读PatternMatcherdocumentation 以了解有关上述解决方案的更多信息。

【讨论】:

    【解决方案2】:

    split 接受正则表达式作为参数,这是一个字符类:[p(,)]

    鉴于您的代码在类中的所有字符上拆分:

    "p(80,2)" 将返回一个数组 {"", "80", "2"}

    我知道不是很漂亮:

    List<String> collect = Pattern.compile("[^\\d]+")
                                  .splitAsStream(s)
                                  .filter(s -> s.length() > 0)
                                  .collect(Collectors.toList());
    

    【讨论】:

      【解决方案3】:

      由于您在 p( 上进行拆分,因此字符串的前两个字符会导致拆分。在替换 p() 后,我会以逗号分隔。像这样:

      String x = "p(80,2)";
      String [] y = x.replaceAll("[p()]", "").split(",");
      

      【讨论】:

        【解决方案4】:

        Split 并不是你真正需要的,但如果你想使用它,你可以这样做:

        "p(80,2)".replace("p(", "").replace(")", "").split(",")
        

        结果

        [80, 2]

        【讨论】:

          猜你喜欢
          • 2011-01-12
          • 2021-12-21
          • 2020-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多