use*_*813 2 java regex string split
我试图将一个字符串拆分成一个字符串数组,问题是.split()
返回一个空元素.("test").split
会回来的["","t","e","s","t"]
.
此问题中的解决方案将字符串拆分为字符串数组解决了问题(使用.split("(?!^)")
).
但是我仍然无法理解为什么会这样,并且我不会使用一段我无法理解的代码,因为它完成了工作.
我读过这两页http://www.regular-expressions.info/lookaround.html和http://ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-2/约负面的预测仍然无法理解.有人可以澄清一下吗?
using ("test").split()
会将字符串拆分到字符前的每个位置,从而产生["", "t", "e", "s", "t"]
,因为第一次拆分(在前面t
)将导致一个空条目.
这个正则表达式("(?!^)"
)的意思是:在每个字符处拆分字符串,其中不是行开头(^)是前一个字符*:
你的字符串基本上看起来(对于正则表达式引擎)是这样的:^test$
所以,正则表达式将执行每次拆分,除了第一次之前的拆分t
,因为它匹配^
- 并且它不应该拆分,当前位置前面的字符是^
(String/Line-Start).
*realley ^
不是一个角色,这就是为什么你之前没有另一个分裂$
- 他们只是元字符 - 所以说.