获取未知长度的分隔字符串的子字符串值

Obtaining a substring value for a delimited String of unknown length

给定字符串数据,由 : 和逗号分隔

分隔
String times =  6:10000:first,12:12000:second,18:15000:third

我需要从最后一个逗号分隔列表中获取第三个值,在上面的例子中 15000

20000 在下面的情况下

String times =  6:10000:first,12:12000:second,18:15000:third,24:20000:fourth

30000 在下面的情况下

String times =  
         6:10000:first,12:12000:second,18:15000:third,24:20000:fourth,30:30000:fourth

类似于:

public String getLastTimeFromCommaSeparatedList() {
    return times.substring(mileages.lastIndexOf(':') + 2);
}

鉴于逗号分隔列表的长度未知,我不清楚如何获得所需的值。

您可以将子字符串与 lastIndexOf 一起使用并像这样拆分:

times.substring(time.lastIndexOf(",")).split(":")[1]

演示

String[] times = {"6:10000:first,12:12000:second,18:15000:third",
        "6:10000:first,12:12000:second,18:15000:third,24:20000:fourth",
        "6:10000:first,12:12000:second,18:15000:third,24:20000:fourth,30:30000:fourth"
};
for (String time : times) {
    System.out.println(
            time.substring(time.lastIndexOf(",")).split(":")[1]
    );
}

输出

15000
20000
30000

您可以使用 regular expression.

String times = "6:10000:first,12:12000:second,18:15000:third,24:20000:fourth,30:30000:fourth";
java.util.regex.Pattern pttrn = java.util.regex.Pattern.compile("(\d+):[a-z]+$");
java.util.regex.Matcher mtchr = pttrn.matcher(times);
if (mtchr.find()) {
    System.out.println(mtchr.group(1));
}
else {
    System.out.println("Nothing found.");
}

模式说明

  • (\d+) 一个或多个数字的字符串。
  • : 冒号字符
  • [a-z]+一个或多个小写字母
  • $输入字符串的结尾

因此该模式在输入字符串的末尾查找数字后跟冒号后跟小写字母。它还对数字进行分组。

它适用于您问题中的每个示例字符串。