假设您在Java中使用此表达式:
"adam".split("")
这告诉Java使用空字符串("adam"
)作为分隔符来分割""
。这会产生:
["", "a", "d", "a", "m"]
为什么Java在开始时包含空字符串,但最后不包含空字符串?使用这个逻辑,结果不应该是:
["", "a", "d", "a", "m", ""]
答案 0 :(得分:10)
分隔符是正则表达式。正则表达式""
在字符串的最开头(a
中的adam
之前)匹配。 docs州:
将此字符串拆分为 给定的正则表达式。
因此,该方法将在a
之前分开匹配。文档还说:
此方法就像通过调用一样工作 两个参数的分裂方法 给定表达式和限制参数 零。尾随空字符串 因此不包括在内 结果数组。
和
如果n为零 然后该模式将应用为 尽可能多次,阵列可以 有任何长度,尾随空 字符串将被丢弃。“
因此,虽然字符串末尾也会有匹配,但会丢弃将导致的尾随空字符串。因此前导空字符串,但没有尾随空字符串。如果你想要尾随空字符串,只需传递一个负值作为第二个参数:
"adam".split("", -1);
这是有效的,因为来自文档的引用:
如果n是非正数,那么模式 将被应用多次 可能,阵列可以有任何 长度。
要回答“为什么中间没有空字符串?”的问题,正则表达式只会在字符串中的每个位置返回一个匹配项。因此,字符串中的两个连续字符之间不能有两个匹配,因此从文档返回我的第一个引号,这些额外的空字符串将不会出现。
答案 1 :(得分:6)
查看split方法的API是这样的文本:“因此,结尾数组中不包括尾随空字符串。”
答案 2 :(得分:2)
是的,但“a”和“d”,“d”和“a”,“a”和“m”之间有空字符串。它们也不会出现在返回的数组中。
split()
方法删除了该空字符串的其他出现。