Java正则表达式-拆分带前导特殊字符的字符串

时间:2019-07-09 19:50:49

标签: java regex split

我正在尝试拆分一个包含空格和特殊字符的字符串。字符串以特殊字符开头。 当我运行代码时,第一个数组元素是一个空字符串。

String s = ",hm  ..To?day,.. is not T,uesday.";
String[] sArr = s.split("[^a-zA-Z]+\\s*");

预期结果为["hm", "To", "day", "is", "not", "T", "uesday"]

有人可以解释这是怎么回事吗?

实际结果是["", "hm", "To", "day", "is", "not", "T", "uesday"]

2 个答案:

答案 0 :(得分:3)

通过在第一个逗号之前的开始处拆分零长度的字符串,拆分行为符合预期。

要解决此问题,请首先从头开始删除所有拆分字符:

String[] sArr = s.replaceAll("^([^a-zA-Z]*\\s*)*", "").split("[^a-zA-Z]+\\s*");

请注意,我已经更改了删除正则表达式,以从正面修剪掉任意顺序的空格和非字母。

您无需从尾部删除,因为split会丢弃结果中的空尾元素。

答案 1 :(得分:1)

我将其简化为两步过程,而不是尝试实现纯正则表达式count < 2操作:

split()