Java String.split()拆分每个字符而不是给定正则表达式

时间:2013-06-22 18:45:11

标签: java regex

我有一个字符串,我想分成一个数组:

SEQUENCE: 1A→2B→3C

我尝试了以下正则表达式:

((.*\s)|([\x{2192}]*))

1. \x{2192} is the arrow mark
2. There is a space after the colon, I used that as a reference for matching the first part

它适用于测试人员(OSX中的模式) enter image description here

但它将字符串拆分为:

[, , 1, A, , 2, B, , 3, C]

如何实现以下目标?:

[1A,2B,3C]

这是测试代码:

String str = "SEQUENCE: 1A→2B→3C"; //Note that there's an extra space after the colon
System.out.println(Arrays.toString(str.split("(.*\\s)|([\\x{2192}]*)")));

2 个答案:

答案 0 :(得分:5)

正如Richard Sitze的帖子所述,正则表达式的主要问题是它应该使用+而不是*。此外,您可以对正则表达式进行进一步的改进:

  • 使用\\x{2192}而不是\u2192。因为它是一个单个字符,所以你不需要将它放入一个字符类([...]),你可以直接使用\u2192+
  • 另外,因为|.*\\s\u2192+松散地绑定,所以你也不需要括号。所以你的最终表达只是".*\\s|\u2192+"

答案 1 :(得分:5)

\u2192*将匹配0个或更多箭头 - 这就是为什么你要拆分每个字符(拆分空字符串)。尝试将*更改为+