Java正则表达式-用前导特殊字符分割字符串

标签 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"]

最佳答案

Split 的行为符合预期,在第一个逗号之前的开头处分割了一个零长度字符串。

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

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

请注意,我已经更改了删除正则表达式,以删除前面的任何空格和非字母序列。

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

关于Java正则表达式-用前导特殊字符分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959653/

相关文章:

java - java中tmp_xxx是什么意思?

java - 如何显示序列化对象的名称

regex - gsub 返回\n(换行符)

java - Java 中的缓冲读取器、行计数、拆分、解析

r - 从 R 脚本中提取函数的更好方法?

java - java-8中的Stream方法是如何实现的?

java - 为什么 `gradle`在每个子项目中都执行 `ant.replaceregexp`?

Javascript 在价格中添加逗号而不删除 DIV

regex - Python字符串匹配

javascript - 如何为每出现 3 个字符拆分一个字符串?