显然,Java中的split
函数已从Java 7更改为Java 8。
(更多信息:
Why in Java 8 split sometimes removes empty strings at start of result array?)
有些人建议使用split("?!^")
而不是split("")
(在Java 7中)。
我的主要问题是如何解释/(?!^)/
?是否有任何与//
不同的情况?
答案 0 :(得分:3)
首先,建议的正则表达式为split("(?!^)")
(与您发布的无效正则表达式相对)。 (?!^)
是一个negative lookahead,可以匹配^
以外的任何地方(字符串的开头)。
正如您已经提到的,split()
中split("(?!^)")
的行为在Java 8中发生了变化,而开头的零宽度匹配却从未产生这样的空前导子串。
因此,如果使用{{1}},您将获得与Java版本无关的相同行为。