Java字符串拆分结果

Java字符串拆分结果,java,string,split,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 在哪里取“”(列表中的第二个),以及为什么结尾的“;”不在输出中。它看起来像数组。toString用空格字

我不明白为什么它的输出是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

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

它看起来像
数组。toString
用空格字符表示您的
拆分
数组,而不是
字符串.split
返回的字符串数组中的实际值,哪个是空字符串
”。最后两个分号不在输出中,因为
String。split
仅将空字符串插入其数组中,您指定的分隔符出现在字符串中,而不是在字符串结束后。

它看起来像
数组。toString
用空格字符表示
split
数组,而不是由
String.split
返回的字符串数组中的实际值,该字符串是空字符串
”。最后两个分号不在输出中,因为
String。split
仅将空字符串插入其数组中,您指定的分隔符出现在字符串中,而不是在字符串结束后。

'
来自您在
name:john
sex:m
之间插入的两个分号。它们不在末尾的事实是因为java忽略了列表末尾的空字符串。

这个
'
来自您在
name:john
sex:m
之间插入的两个分号。它们不在末尾是因为java忽略了列表末尾的空字符串。

文档说

此方法的工作方式类似于通过调用具有 给定的表达式和零的极限参数。尾随空 因此,结果数组中不包括字符串

文件上说

此方法的工作方式类似于通过调用具有 给定的表达式和零的极限参数。尾随空 因此,结果数组中不包括字符串

拆分(;”)
将从每个分号之前、之间和之后获取字符串。因此,从理论上讲,您的
拆分
数组在操作中的某个点上应该是
{“name:john”、“”、“sex:m”、“”、“”}
。但是,
split()
会删除尾随的空字符串,因此实际上会得到
{“name:john”、“”、“sex:m”}

至于为什么不打印终端分号,是因为您对每个分号进行了拆分,没有限制。
限制是结果数组的长度

您通常可以通过对多个字符使用适当的
regex
来修复内部空字符串。您可能需要检查
拆分(;++)
。如果您想要终端分号,您需要设置一个限制
拆分(;+”,2)
拆分(;”)
将从每个分号之前、之间和之后获取字符串。因此,从理论上讲,您的
拆分
数组在操作中的某个点上应该是
{“name:john”、“”、“sex:m”、“”、“”}
。但是,
split()
会删除尾随的空字符串,因此实际上会得到
{“name:john”、“”、“sex:m”}

至于为什么不打印终端分号,是因为您对每个分号进行了拆分,没有限制。
限制是结果数组的长度


您通常可以通过对多个字符使用适当的
regex
来修复内部空字符串。您可能需要检查
拆分(;++)
。如果您想要终端分号,您需要设置一个限制
split(;+”,2)

没有任何限制。您在
上拆分,使之间的空白<代码>是什么带走了它。在
上拆分和Javadoc
中的尾随空字符串不包括在结果数组中什么都不是。您在
上拆分,使之间的空白<代码>是什么带走了它。在
上拆分和Javadoc
中的尾随空字符串不包括在结果数组中是的,它是,我已经为每个打印了这些,它是空的!漂亮的眼睛看起来像。。。但是“结尾的最后两个分号不在输出中,因为String.split只将空字符串插入其数组中,您指定的分隔符出现在字符串中,而不是在字符串结束后。”这是Oracle文档中我没有提到的部分是的,是的,我已经为每个字符串打印了这些分号,它是空的!漂亮的眼睛看起来像。。。但是“结尾的最后两个分号不在输出中,因为String.split只将空字符串插入其数组中,您指定的分隔符出现在字符串中,而不是在字符串结束后。”这是Oracle文档中我没有提到的部分Java不会忽略任何内容,
split()
确实如此,而且令人惊讶的是,Java 7和Java 8在功能上存在差异。只有那些在列表末尾的?是的,只有那些在列表末尾的。中间的是被保存的。java不忽略任何东西,<代码> SPLIT()/Cuth>,在一个令人惊讶的动作中,java 7和java 8在功能上有区别。只是列表的末尾有那些区别?是的,只有在最后的那些。中间的部分是保留的。“文件应该解释它,并且链接它们描述所有的正则表达式。”