考虑拆分表达式",1,2,3,4".split(",");
你会期待什么?对,一个空字符串开始。在您的情况下,您在第一个“a”前面和后面都有一个“无”。
更新:评论表明这个解释还不够解释(它可能不是)......但是,它真的很简单:引擎从字符串的开头开始,它查看前面是否有什么它匹配模式。如果是这样,它会将其背后的内容分配给拆分中的新项目。
在第一个字符上,它有“”(后面什么都没有),它会查看它前面是否有“”(模式)。有,所以它创建了一个 "" 匹配。
然后它继续前进,它的后面有一个“a”,它的前面又是一个“”。所以第二个结果是一个“a”字符串。
一个有趣的观察是,如果你使用split("", -1)
你也会在结果数组的最后一个位置得到一个空字符串结果。
编辑2:如果我进一步绞尽脑汁,并认为这是一项学术练习(我在现实生活中不建议这样做......)我只能想到一种split()
将字符串的正则表达式转换为String[]
数组的好方法每个字符串中的 1 个字符(与 char[] 相反——其他人已经给出了很好的答案......)。
String[] chars = str.split("(?<=.)", str.length());
这将查看每个字符的后面,在一个非捕获组中,并在其上拆分,然后将数组大小限制为字符数(您可以str.length()
省略,但如果放置-1
,最后会得到一个额外的空间)
借用 nitro2k01 的替代方案(在评论下方)引用字符串的开头和结尾,您可以可靠地拆分:
String[] chars = str.split("(?!(^|$))");