我不明白为什么这会得到3的输出:
String[] split = "name:john;;sex:m;;".split(";");
System.out.println(Arrays.toString(split) + " size " + split.length);
我已阅读过Oracle文档,但我仍然不知道为什么是3。
为什么输出是:
[name:john, , sex:m] size 3
在哪里取''(列表中的第二个),以及为什么“;;”最后不在输出中。
答案 0 :(得分:3)
答案 1 :(得分:1)
split(";")
将从每个分号之前,之间和之后获取字符串。因此,理论上您的split
数组在操作的某个时刻是{"name:john","","sex:m","",""}
。但是,split()
会删除尾随的空字符串,因此您实际上会获得{"name:john","","sex:m"}
。
至于为什么你没有打印终端分号,是因为你在没有限制的情况下拆分每个单独的分号。 limit
是结果数组的长度。
您通常可以通过对多个字符使用正确的regex
来修复内部空字符串。您可以查看split(";++")
。如果您需要终端分号,则需要设置限制split(";++",2)
。
答案 2 :(得分:0)
看起来Arrays.toString
表示带有空格字符的split
数组,而不是String.split
返回的字符串数组中实际存在的数字,这是空字符串{ {1}}。结尾的最后两个分号不在输出中,因为""
只将空字符串插入到其数组中,其中您指定的分隔符出现在字符串中,而不是在字符串结束后。
答案 3 :(得分:0)
''
来自您在name:john
和sex:m
之间放置的两个分号。它们不在最后的事实是因为java忽略列表末尾的空字符串。