【问题标题】:Java / Android regex questionJava / Android 正则表达式问题
【发布时间】:2011-09-04 23:56:22
【问题描述】:

我想在 Java / Android 中创建一个正则表达式,它在第三个逗号之后或实际上在第三个逗号处截断字符串。这可能吗?有什么建议可以让我开始吗?

【问题讨论】:

  • 有什么建议让你开始做这件事? Learn regular expressions.
  • @Martihno - 我知道...我知道。我只是很少这样做,以至于我总是从头开始。在 SO 上发布问题给了我一些继续下去的动力。

标签: java regex


【解决方案1】:

不确定正则表达式是否是我在这里的第一种方法。无论如何,以下是我的替代方案。

  • 使用正则表达式 (ideone.com demo)

    Matcher m = Pattern.compile("(.*?,.*?,.*?),").matcher(str);
    if (m.find())
        str = m.group(1);
    


  • 使用indexOf / substring (ideone.com demo)

    str = str.substring(0, str.indexOf(',',
                           str.indexOf(',',
                           str.indexOf(',') + 1) + 1));
    


【讨论】:

    【解决方案2】:

    看看Pattern类。

    替代方案:String#split 您的字符串或使用StringTokenizer

    【讨论】:

    • 使用 split 或 StringTokenizer 会强制他连接结果。不是很优雅 imo。
    • 当然,但我不知道他真正想要实现什么或对结果做什么(因此只有“替代品”)。只是想给出一些建议,如他的回答中所述;)
    • 感谢您的想法。所有的答案都很好,但是由于正则表达式对我来说看起来像是发誓,所以我做了一个很好的小拆分和循环。 .
    • 您看过我的两个非正则表达式解决方案了吗?它们不需要任何循环。
    【解决方案3】:

    s/([^,]*,){3}.+/\1/ 翻译成Java regex-ese 以在第三个逗号后截断,s/([^,]*,[^,]*,[^,]*),.+/\1/ 使截断部分包含第三个逗号。

    【讨论】:

      【解决方案4】:
      int comma = -1;
      int n = 0;
      do {
          comma = str.indexOf(',', comma + 1);
      } while (comma >= 0 && ++n < 3);
      if (comma > 0) {
          str = str.substring(0, comma);
      } else {
          // third comma not found
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 2015-11-25
        • 1970-01-01
        相关资源
        最近更新 更多