我想在每次出现 alpha-beta 字符时拆分我的字符串。
例如:
"s1l1e13"
到一个数组:["s1","l1","e13"]
当尝试使用正则表达式进行简单拆分时,我得到了一些奇怪的结果:
testStr = "s1l1e13"
Arrays.toString(testStr.split("(?=[a-z])"))
给我数组:
["","s1","l1","e13"]
如何在没有空数组元素的情况下创建拆分?
我尝试了更多的东西:
testStr = "s1"
Arrays.toString(testStr.split("(?=[a-z])"))
返回当前数组:["s1"]
但是当尝试使用子字符串时
testStr = "s1l1e13"
Arrays.toString(testStr.substring(1).split("(?=[a-z])")
我得到返回 ["1","l1","e13"]
我错过了什么?
最佳答案
Lookahead 标记了 a
到 z
任何字符之前的每个位置;标记以下位置:
s1 l1 e13
^ ^ ^
因此,通过仅使用 Lookahead 进行拆分
,它返回 ["", "s1", "l1", "e13"]
您可以在此处使用Negative Lookbehind。这向后看是否有不是字符串的开头。
String s = "s1l1e13";
String[] parts = s.split("(?<!\\A)(?=[a-z])");
System.out.println(Arrays.toString(parts)); //=> [s1, l1, e13]
关于Java按alphabeta char拆分在数组中创建一个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996609/