我有两个字符串:
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']
答案 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"在这种情况下。