我正在尝试拆分包含空格和特殊字符的字符串。该字符串以特殊字符开头。 当我运行代码时,第一个数组元素是一个空字符串。
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/