【问题标题】:Obtaining a substring value for a delimited String of unknown length获取未知长度的分隔字符串的子字符串值
【发布时间】:2021-11-28 10:07:54
【问题描述】:

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

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);
}

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

【问题讨论】:

  • 查看String.split

标签: java substring


【解决方案1】:

您可以使用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]+ 一个或多个小写字母
  • $输入字符串的结尾

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

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

【讨论】:

    【解决方案2】:

    您可以将 substring 与 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 2014-11-20
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多