我的任务是将一个以数字开头并包含数字和字母的字符串拆分为两个子字符串。第一个字符串包含第一个字母前的所有数字。第二个是剩下的部分,即使它包含数字也不应拆分。
例如,字符串“123abc34de”应拆分为:“123”和“abc34de”。
我知道如何为这样的字符串编写正则表达式,它可能如下所示:
[0-9]{1,}[a-zA-Z]{1,}[a-zA-Z0-9]{0,}
我已多次尝试但仍然不知道如何在String.split()方法中应用正则表达式,而且似乎很少有关于此的在线资料。谢谢你的帮助。
答案 0 :(得分:1)
你可以这样做
final String regex = "([0-9]{1,})([a-zA-Z]{1,}[a-zA-Z0-9]{0,})";
final String string = "123ahaha1234";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
matcher.group(1)包含第一部分,matcher.group(2)包含第二部分
您可以使用这些值将其添加到列表/数组
答案 1 :(得分:1)
你可以使用一个非常简单的模式:"^(\\d+)(\\w+)"
捕获数字作为开始,然后当字母出现时需要word-char
String string = "123abc34de";
Matcher matcher = Pattern.compile("^(\\d+)(\\w+)").matcher(string);
String firstpart = "";
String secondPart = "";
if (matcher.find()) {
firstpart = matcher.group(1);
secondPart = matcher.group(2);
}
System.out.println(firstpart + " - " + secondPart); // 123 - abc34de
答案 2 :(得分:0)
这不是正确的方法,但你会得到结果
public static void main(String[] args) {
String example = "1234abc123";
int index = 0;
String[] arr = new String[example.length()];
for (int i = 0; i < example.length(); i++) {
arr = example.split("");
try{
if(Integer.parseInt(arr[i]) >= 0 & Integer.parseInt(arr[i]) <= 9){
index = i;
}
else
break;
}catch (NumberFormatException e) {
index = index;
}
}
String firstHalf = example.substring(0,Integer.parseInt(arr[index])+1);
String secondHalf = example.substring(Integer.parseInt(arr[index])+1,example.length());
System.out.println(firstHalf);
System.out.println(secondHalf);
}
输出为:1234,下一行为abc123