在Java中提取从末尾到第一个字母的子字符串

3
我有一个格式为A-2-Q4567的字符串。
更多示例:AB-456-T12、A24-5-M12345等。
我想从这些字符串中提取最后的数字值,它们分别是4567、12、12345(即从结束位置到第一个非数字字符的子字符串的数字值)。
我可以将字符串拆分,从拆分后的字符串数组中获取最后一个字符串,然后在去除非数字字符后进行解析。
但是否有更优雅的方法实现?
2个回答

2
您可以使用这个正则表达式(\d+$)。它能返回字符串中最后一组数字。 编辑 - 一些解释:
\d表示任何数字。
+表示前一个符号的一个或多个。由于前一个符号是数字,因此\d+表示“一个或多个数字”。
$表示字符串结尾,因此\d+$是字符串中最后一组数字。

不错的回答,但是更详细的解释会更好(例如,控制字符\d+$分别代表什么)。 - Michael

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循环更昂贵。

当然,正则表达式更加灵活,如果您的要求发生变化,现在必须在数字前面加一个破折号“-”?使用正则表达式只需要更改一个正则表达式即可。

我在这里放置了正则表达式版本,但请记住,如果您确定您的要求不会改变,我认为上述解决方案对CPU更好:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接