Java字符串拆分结果

时间:2015-10-25 19:03:36

标签: java string split

我不明白为什么这会得到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

在哪里取''(列表中的第二个),以及为什么“;;”最后不在输出中。

4 个答案:

答案 0 :(得分:3)

文档说

  

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

here

答案 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:johnsex:m之间放置的两个分号。它们不在最后的事实是因为java忽略列表末尾的空字符串。