字符串包含以下内容:
我正在尝试在一个可以使用的正则表达式中进行拆分:
String string = "123abc";
var array = string.split(...);
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
我最接近的正则表达式如下:
(?<=\d+)
示例:
String string = "123abc";
var array = string.split("(?<=\\d+)");
System.out.println(java.util.Arrays.toString(array));
// prints [1, 2, 3, abc]
从技术上讲,我可以不使用任何正则表达式来执行此操作,但是在这里,使用正则表达式很重要。
一种证明我可以正常执行的解决方案:
String string = "123abc";
int i = 0;
for(; i < string.length() && Character.isDigit(string.charAt(i)); i++)
;
String[] array = {
string.substring(0, i), string.substring(i)
};
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
另一种方法是:
String string = "123abc";
String[] array = {
string.replaceAll("\\D", ""),
string.replaceAll("\\d", "")
};
System.out.println(java.util.Arrays.toString(array));
// prints [123, abc]
匹配示例:
In: Out:
123abc [ "123", "abc" ]
0a [ "0", "a" ]
a [ "", "a" ]
答案 0 :(得分:1)
Pattern.split()文档说:
如果在输入序列的开头有一个正宽匹配,则在结果数组的开头将包含一个空的前导子字符串。开头的零宽度匹配永远不会产生这样的空前导子字符串。
因此,使用正则表达式可能无法实现您想要的目标。