在java

时间:2016-07-10 16:11:09

标签: java string substr

我有一串格式:A-2-Q4567

更多例子:AB-456-T12,A24-5-M12345等

我想从这些字符串中提取最后的数值,分别是:4567,12,12345(这是从结尾到遇到第一个非数字字符的子字符串的数值)

我可以拆分字符串,从分割的字符串数组中获取最后一个字符串,然后从中删除非数字字符后再执行一次parseInt。

但有更优雅的方式吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此regex(\d+$)。它返回字符串中的最后一个数字序列。

编辑 - 一些解释:
\d表示任何数字 +表示一个或多个先前的符号。由于前一个符号是数字,因此\d+表示“一个或多个数字” $表示字符串的结尾,因此\d+$是字符串中最后数字序列。

答案 1 :(得分:0)

你可以这样做:

String getLastNumeric(String input)
{
    String str="";
    char c;
    for(int i=input.length()-1;i>=0 && Character.isDigit(c=input.charAt(i));i--)
        str=c+str;
    return str;
}

正则表达式解决方案可能更优雅,但性能方面我认为上述是最好的,因为正则表达式匹配可能比简单的for循环更昂贵,并且具有简单的条件来评估。

当然正则表达式更灵活,如果您的要求发生变化,现在短划线“ - ”必须在数字之前?使用正则表达式应该只是改变一个正则表达式的问题。

我把Regex版本放在这里,但请记住,如果你确定你的要求不会改变,我认为上述解决方案在CPU上更好:

Matcher matcher= Pattern.compile("(\\d+$)").matcher(input);
if(matcher.find())
    return matcher.group();
return "";