假设您在Java中使用此表达式:
"adam".split("")
Run Code Online (Sandbox Code Playgroud)
这告诉Java "adam"使用空字符串("")作为分隔符进行拆分.这会产生:
["", "a", "d", "a", "m"]
Run Code Online (Sandbox Code Playgroud)
为什么Java在开始时包含空字符串,而不是在结尾处?使用这个逻辑,结果不应该是:
["", "a", "d", "a", "m", ""]
Run Code Online (Sandbox Code Playgroud)
mar*_*cog 10
分隔符是正则表达式.正则表达式""在字符串的最开头(在ain 之前adam)匹配.该文档的状态:
将此字符串拆分为给定正则表达式的匹配项.
因此该方法将在之前的比赛中分开a.文档还说:
此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样.因此,结尾的空字符串不包含在结果数组中.
和
如果n为零,那么模式将被应用尽可能多的次数,数组可以具有任何长度,并且尾随空字符串将被丢弃."
因此,虽然在字符串的末尾也会有匹配,但会丢弃将导致的尾随空字符串.因此前导空字符串,但没有尾随空字符串.如果你想要尾随空字符串,只需传递一个负值作为第二个参数:
"adam".split("", -1);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为来自文档的引用:
如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度.
要回答"为什么中间没有空字符串?"的问题,正则表达式只会在字符串中的每个位置返回一个匹配项.因此,字符串中的两个连续字符之间不能有两个匹配项,因此从文档返回到我的第一个引号,这些额外的空字符串将不会出现.
| 归档时间: |
|
| 查看次数: |
1394 次 |
| 最近记录: |