我有一个将字符串拆分成数组的简单方法。它将它分成有非字母字符的地方。我现在使用的这一行如下:
String[] words = str.split("[^a-zA-Z]");
所以这应该将字符串拆分为只有字母字符的地方。但问题是,当它分裂时,它适用于某些,但不是全部。例如:
String str = "!!day--yaz!!";
String[] words = str.split("[^a-zA-Z]");
String result = "";
for (int i = 0; i < words.length; i++) {
result += words[i] + "1 ";
}
return result;
我在那里添加了1以查看拆分发生的位置,因为我在空值上遇到错误。无论如何,当我运行这段代码时,我得到一个输出:
1 1 day1 1 yaz1
为什么它会在前两个之间分开,然后在最后两个之后分开,而不是在最后两个之后!为什么它甚至在那里分裂?对此的任何帮助都会很棒!
答案 0 :(得分:5)
答案 1 :(得分:3)
这是因为它确实使用每个非字母字符作为分隔符。这意味着字符串"!"
将被拆分为感叹号左侧和右侧的2个空字符串数组。
您的问题可以通过两个步骤解决。
"[^a-zA-Z]+"
代替"[^a-zA-Z]"
。 +
将帮助您避免2个短划线之间的空字符串。str.replaceFirst("[^a-zA-Z]+").replaceFirst("[^a-zA-Z]+$")
最后你的拆分看起来像是:
String[] words = str..replaceFirst("[^a-zA-Z]+").replaceFirst("[^a-zA-Z]+$")split("[^a-zA-Z]");
答案 2 :(得分:1)
如果您想摆脱一些额外的拆分,请使用split("[^a-zA-Z]+")
代替split("[^a-zA-Z]")
。这将匹配与模式匹配的String
的连续部分。