这似乎像您期望的那样工作
data.split('0+|(?<=([1-9]))(?=[1-9])(?!1)');
测试:
String[] tests = { '11101100112021120', '222222222', '222222122','000000000', '0000100000', '11121222212112133321' };for (String data : tests) { System.out.println(data + ' ->' + Arrays.toString(data.split('0+|(?<=([1-9]))(?=[1-9])(?!1)'))); System.out.println('-----------------------');}
输出:
11101100112021120 ->[111, 11, 11, 2, 2, 11, 2]-----------------------222222222 ->[222222222]-----------------------222222122 ->[222222, 1, 22]-----------------------000000000 ->[]-----------------------0000100000 ->[, 1] // <-- only problem - empty first element -----------------------11121222212112133321 ->[111, 2, 1, 2222, 1, 2, 11, 2, 1, 333, 2, 1]-----------------------
不幸的是,前导零将使数组包含其他空字符串。要摆脱它,您可以更早地删除这些零data.replaceFirst('^0+(?=[^0])', '')
解决方法我有一些String仅由数字组成的,并且我想在字符更改时将其拆分。
例如:
'11101100112021120' 前往: {'111','11','2','2'}'222222222' 去 {'222222222'}'222222122' 去 {'222222','1','22'}'000000000' 去 {}'0000100000' 去 {'1'}'11121222212112133321' 去 {'111','2222','333','1'}我想要一个好方法。
我知道两种解决方法:仅是强行强制执行,或者逐节添加。或者,我可以删除所有0并替换为0,然后在字符更改时添加0,然后对0进行拆分,但是这两种方式都显得很愚蠢。如果有人对更好/更美的方法,正则表达式或逻辑有任何想法,那就太好了。