Java字符串用单词,空格和特殊字符分隔正则表达式

时间:2016-08-09 17:34:16

标签: java regex string split java-8

我有两个字符串:

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*");

我正在对结果进行单元测试,对于String 1它工作正常并且在数组中返回3个但是对于第二个String 2它也返回数组中的空白空间。

我做错了什么?请帮忙。

由于

String 2返回数组中的3个元素,[,'D','C']

2 个答案:

答案 0 :(得分:3)

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

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

BTW,您发布的代码会生成[route, D, C],而非[D, C]

答案 1 :(得分:0)

尝试以下方法:

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

您必须编写单独的逻辑来处理不匹配的字符,如" route"在这种情况下。