字符更改时拆分字符串。可能的正则表达式解决方案?
摘要: 如何解决字符更改时拆分字符串。可能的正则表达式解决方案?测试;System.out.println(data + " -˃˂\\1)")))!System.out.println("-----------------------");-----------------------;22];-----------------------,前导零将使数组包含其他空字符串,
如何解决字符更改时拆分字符串。可能的正则表达式解决方案??
这似乎像您期望的那样工作
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进行拆分,但是这两种方式都显得很愚蠢。如果有人对更好/更美的方法,正则表达式或逻辑有任何想法,那就太好了。
我来说两句