java子串方法

时间:2018-04-18 13:31:02

标签: java string

在使用带有开始和结束索引的java子字符串方法解析动态输入字符串时,我们可以在子字符串方法的结束索引中使用或条件吗?含义结束索引可以是')'或','对于我的用例。

Ex:我的输入字符串有两种格式

inputformat1 : Student(name: Joe, Batch ID: 23) is updated
inputformat2 : Student(name: John, ID:0, Batch ID: 2503, Result: pass) is updated

现在我有兴趣获得"批次ID"每次都有价值。我想通过substring方法实现这一点。现在我能够获得批次id值如果我使用任何一个索引,即')'或','

String batchId= input.substring(input.indexOf("Batch ID: ")+9,input.indexOf(")")); 

有人可以帮我解决基于不同终端索引的批量Id值吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Math.min():

String batchId = input.substring(input.indexOf("Batch ID: ") + 9,
                     Math.min(tail_old.indexOf(")"), tail_old.indexOf(",")));

答案 1 :(得分:1)

例如,您可以使用正则表达式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

如果你想要多个组,你也可以使用这样的模式:

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