Android正则表达式提取带$符号字符串中的double数值问题
解决正则提取美元金额的问题
嘿,我知道你卡在哪了!问题主要出在两个地方:一是正则里的.没转义(它默认匹配任意字符,不是我们要的小数点),二是原正则写法太局限,只能固定匹配两位整数,另外后面附加的\\s?[^Xx]?匹配条件也可能干扰结果。
修正方案
我们需要调整正则表达式,确保准确匹配美元符号后的数字:
1. 优化后的正则表达式
使用\\$(\\d+\\.?\\d*),各部分含义:
\\$:准确匹配字面量美元符号(因为$在正则中是行尾标识,必须用双反斜杠转义,Java字符串里需要写\\$)(\\d+\\.?\\d*):捕获我们需要的数字部分:\\d+:匹配1位或多位整数(不再局限于两位,兼容$5、$100这类金额)\\.?:匹配可选的小数点(转义.才能表示字面量的点)\\d*:匹配0位或多位小数(同时兼容整数金额和带小数的金额)
如果你的金额可能带正负号(比如字符串里的+$),可以把正则升级为[+-]?\\$(\\d+\\.?\\d*),这样能匹配+$35.25或-$10.50这类格式。
2. 修改后的代码
String total = "Your current total is +$35.25"; // 使用优化后的正则调用方法 double amount = getNumberFromString("\\$(\\d+\\.?\\d*)", total); public double getNumberFromString(String regex, final String input) { double n = 0.0; Matcher matcher = Pattern.compile(regex).matcher(input); // 因为只需要提取一个金额,用if比while更合适 if (matcher.find()) { try { n = Double.parseDouble(matcher.group(1)); // Log.e(TAG, "Number is : " + matcher.group(1)); } catch (NumberFormatException ex) { n = 0.0; } } return n; }
效果验证
这段代码会正确从字符串中捕获35.25,并转换为对应的double类型数值返回,解决你之前返回0.00的问题。
内容的提问来源于stack exchange,提问作者user2101081
相关产品推荐
相关产品推荐

