我想通过将所有非字母设置为分隔符来分割字符串。
String[] word_list = line.split("[^a-zA-Z]");
但是有以下输入
11:11 Hello World
word_list在“hello”和“world”之前包含许多空字符串
请告诉我原因。谢谢。
答案 0 :(得分:2)
这是您的字符串,其中每个^
字符显示[^a-zA-Z]
的匹配项:
11:11 Hello World
^^^^^^ ^
split
方法找到每个匹配项,并基本返回^
个字符之间的所有子字符串。由于在任何有用数据之前有六个匹配项,因此在获得字符串"Hello"
之前最终会得到5个空子字符串。
为了防止这种情况,您可以手动过滤结果以忽略任何空字符串。
答案 1 :(得分:2)
因为您的正则表达式匹配每个单独的非alpha字符。这就像分开
",,,,,,Hello,World"
逗号。
您需要一个匹配整个非字母字符序列的表达式,例如:
line.split("[^a-zA-Z][^a-zA-Z]*")
我仍然认为你的示例会得到一个前导空字符串,因为如果逗号是你的分隔符就像分隔",Hello,World"
一样。
答案 2 :(得分:0)
以下是否会这样做?
String[] word_list = line.replaceAll("[^a-zA-Z ]","").replaceAll(" +", " ").trim().split("[^a-zA-Z]");
我在这里做的是在进行拆分之前删除所有非字母字符,然后用一个空格替换多个空格。