Java使用负前瞻将字符串拆分为字符

use*_*813 2 java regex string split

我试图将一个字符串拆分成一个字符串数组,问题是.split()返回一个空元素.("test").split会回来的["","t","e","s","t"].

此问题中的解决方案将字符串拆分为字符串数组解决了问题(使用.split("(?!^)")).

但是我仍然无法理解为什么会这样,并且我不会使用一段我无法理解的代码,因为它完成了工作.

我读过这两页http://www.regular-expressions.info/lookaround.htmlhttp://ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-2/约负面的预测仍然无法理解.有人可以澄清一下吗?

dog*_*ose 5

using ("test").split()会将字符串拆分到字符前的每个位置,从而产生["", "t", "e", "s", "t"],因为第一次拆分(在前面t)将导致一个空条目.

这个正则表达式("(?!^)")的意思是:在每个字符处拆分字符串,其中不是行开头(^)是前一个字符*:

你的字符串基本上看起来(对于正则表达式引擎)是这样的:^test$ 所以,正则表达式将执行每次拆分,除了第一次之前的拆分t,因为它匹配^- 并且它不应该拆分,当前位置前面的字符是^(String/Line-Start).

*realley ^不是一个角色,这就是为什么你之前没有另一个分裂$- 他们只是元字符 - 所以说.