[英]Java String split result
我不明白为什么这会得到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
在哪里使用“”(列表中的第二个),以及为什么“ ;;” 最后没有出现在输出中。
split(";")
将在每个分号之前,之间和之后获取字符串。 因此,在操作过程中的某个时刻,您的split
数组理论上将为{"name:john","","sex:m","",""}
。 但是, split()
删除了结尾的空字符串,因此您实际上得到了{"name:john","","sex:m"}
。
至于为什么没有打印终端分号的原因,是因为您可以无限制地分割每个单独的分号。 limit
是结果数组的长度。
您通常可以通过对多个字符使用正确的regex
来修复内部空字符串。 您可能要检查split(";++")
。 如果要使用终端分号,则需要设置一个限制split(";++",2)
。
看起来Arrays.toString
用空格字符表示split
数组,而不是用String.split
返回的String数组中的实际值,它是空字符串""
。 最后的两个分号不在输出中,因为String.split
仅将空字符串插入其数组中您指定的分隔符出现在其数组中的位置,而不是在字符串结束之后。
''
来自您在name:john
和sex:m
之间插入的两个分号。 它们不在末尾的事实是因为java会忽略列表末尾的空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.