我有以下方法,用于从字符串中提取金额。
strAmountString =“24 个月 272.94 美元/月 常规价格 - 336.9 美元”
public static String fnAmountFromString(String strAmountString) {
String strOutput = "";
Pattern pat = Pattern.compile("\\$(-?\\d+.\\d+)?.*");
Matcher mat = pat.matcher(strAmountString);
while(mat.find())
strOutput = mat.group(1);
return strOutput;
}
现在我必须从字符串中提取字符串272.94
,上面的函数工作正常。
但是当我必须从字符串 strAmountString = "272.94"
中提取 272.94
时,给我一个 null。
此外,我还必须从 string strAmountString = "$272.94/mo for 24 Month Regular Price -$336.9"中提取金额
-336.9
最佳答案
尝试使用 272.94
时出现的第一个问题与正则表达式的要求有关,事实上,String
需要由 $
开头
您可以将 $
作为可选组的一部分,例如 ((\\$)?\\d+.\\d+)
,它将匹配 272.94
和 $272.94
,但不会直接匹配 -$336.9
,但它会匹配 $336.9
。
因此,在您的示例中,您可以使用 ((-)?(\\$)?\\d+.\\d+)
,它现在也将匹配 -$336.9
...
就我个人而言,我可能会使用 ((-)?(\\$)?(-)?\\d+.\\d+)
,它将匹配 -$336.9
、$-336.9
、-336.9
和 336.9
下一步将尝试从结果中删除 $
,是的,您可以尝试使用其他正则表达式,但说实话,String#replaceAll
会更容易...
注意-我的正则表达式知识非常基础,所以可能有更简单的解决方案
已更新示例
String value = "$272.94/mo for 24 months Regular Price -$336.9";
String regExp = "((-)?(\\$)?(-)?\\d+.\\d+)";
Pattern p = Pattern.compile(regExp);
Matcher matcher = p.matcher(value);
while (matcher.find()) {
System.out.println(matcher.group());
}
哪个输出...
$272.94
-$336.9
关于java - 从字符串中的金额中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314225/