【问题标题】:Java string delimit regex with word, spaces and special charactersJava字符串用单词、空格和特殊字符分隔正则表达式
【发布时间】:2016-08-09 17:34:15
【问题描述】:

我有两个字符串:

String one = "D -> B: 24"; // I am expecting array to have ['D','B','24']
String two = "route D -> C"; // expecting array to have ['D','C']

我的正则表达式是:

String myarray[] = input.split("\\s*(->|:|\\s)\\s*");

我正在对结果进行单元测试,对于字符串 1,它工作正常,并在数组中准确返回 3,但对于第二个字符串,它也在数组中返回一个空白空间。

我做错了什么?请帮忙。

谢谢


字符串二返回数组中的3个元素,[,'D','C']

【问题讨论】:

  • 字符串二的返回值是多少?它捕获了哪个空间?
  • [A-Z\\d]+ .........
  • @cxw 我编辑了我的问题。请看。
  • @AvinashRaj '->' 和 ':' 呢?
  • 我这边得到的是 [route, D, C] for two

标签: java regex string split java-8


【解决方案1】:

你想要大写和数字 - 即[A-Z0-9]+。最简单的方法是删除所有前导和尾随不匹配的字符 - 即[^A-Z0-9]+,然后拆分不匹配的字符,如下所示:

String myarray[] = input.replaceAll("^[^A-Z0-9]+|[^A-Z0-9]+$", "").split("[^A-Z0-9]+");

顺便说一句,您发布的代码会生成[route, D, C],而不是[D, C]

【讨论】:

    【解决方案2】:

    尝试以下方法:

    String myarray[] = two.split("\\s*(->|:)\\s*");
    

    在这种情况下,您必须编写单独的逻辑来处理“路由”等不匹配字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多