我有一串格式:A-2-Q4567
更多例子:AB-456-T12,A24-5-M12345等
我想从这些字符串中提取最后的数值,分别是:4567,12,12345(这是从结尾到遇到第一个非数字字符的子字符串的数值)
我可以拆分字符串,从分割的字符串数组中获取最后一个字符串,然后从中删除非数字字符后再执行一次parseInt。
但有更优雅的方式吗?
答案 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 "";