在使用带有起始和结束索引的java子字符串方法解析动态输入字符串时,我们可以在子字符串方法的结束索引中使用或条件吗?在我的用例中,最终索引可以是')'或','。
例如:我的输入字符串具有以下两种格式
inputformat1 : Student(name: Joe, Batch ID: 23) is updated
inputformat2 : Student(name: John, ID:0, Batch ID: 2503, Result: pass) is updated
现在,我有兴趣每次都获取“批次ID”值。我想通过子字符串方法实现这一点。现在,如果我使用任何一个索引,即“)”或“,”,我就可以获取批次ID值
String batchId= input.substring(input.indexOf("Batch ID: ")+9,input.indexOf(")"));
有人可以帮助我根据不同的最终指标来批量分配ID值吗?
最佳答案
例如,您可以将regex与replaceFirst
一起使用来解决您的问题;例如:
List<String> strings = Arrays.asList("Student(name: Joe, Batch ID: 23) is updated",
"Student(name: John, ID:0, Batch ID: 2503, Result: pass) is updated"
);
for (String string : strings) {
System.out.println(
string.replaceFirst(".*Batch ID:\\s+(\\d+).*", "$1")
);
}
产出
23
2503
如果要多个组,也可以使用Patterns,例如:
Pattern pattern = Pattern.compile("name:\\s+(.*?),.*?Batch ID:\\s+(\\d+)");
Matcher matcher;
for (String string : strings) {
matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(
String.format("name : %s, age : %s", matcher.group(1), matcher.group(2))
);
}
}
产出
name : Joe, age : 23
name : John, age : 2503