在 Selenium 自动化测试中,常常会遇到带格式的文本,比如 "$1,299.99" 这样的价格。本文要解决的,就是如何从中精准提取出纯数字,并转换成可以直接用于计算或比价的数值类型。 问题背景:Selenium 获取的价格文本包含多余字符 用 Selenium 抓取网页上的价格时,比如拿到的元
在 Selenium 自动化测试中,常常会遇到带格式的文本,比如 "$1,299.99" 这样的价格。本文要解决的,就是如何从中精准提取出纯数字,并转换成可以直接用于计算或比价的数值类型。
用 Selenium 抓取网页上的价格时,比如拿到的元素文本是 $1,299.99,getText() 返回的是原始 DOM 文本——里面混着货币符号、逗号、小数点,甚至可能还有空格。要想做数值比较、存数据库或者继续计算,必须先清洗掉这些非数字字符,再转成标准的 double 或 int 类型。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
最推荐的做法是用正则表达式来做健壮的清洗。下面这个通用工具方法可以直接用:
public static String extractDigitsAndDot(String input) { if (input == null || input.trim().isEmpty()) { return "0"; } // 保留数字、小数点(.),移除所有其他字符(含 $、,、空格、、 等) return input.replaceAll("[^d.]", "");}
注意一下:这里的正则 [^d.] 意思是“匹配所有非数字且非小数点的字符”,比 [^d.] 更简洁安全(Java 中 \d 已经涵盖 Unicode 数字,. 在字符类里不需要转义)。如果想保留千分位逗号后面的小数点(比如 "1,299.99" → "1299.99"),这个逻辑天然兼容——因为逗号被清掉了,只剩下数字和小数点。
接着可以安全地转成数值类型:
String rawPrice = price.getText(); // e.g., "$1,299.99"String cleanPriceStr = extractDigitsAndDot(rawPrice); // → "1299.99"// 转 double(推荐:保留小数精度,适合价格计算)double numericPrice = Double.parseDouble(cleanPriceStr);// 或转整数(仅当明确需去小数,如单位为“分”时可乘100后转 long)long cents = Math.round(numericPrice * 100); // 避免浮点误差,用于精确金额处理System.out.println("Raw: " + rawPrice);System.out.println("Clean: " + cleanPriceStr);System.out.println("As double: " + numericPrice);System.out.println("Cents: " + cents);
getText() 的结果一定要做空值和空字符串校验,不然容易抛出 NullPointerException 或 NumberFormatException。NumberFormat 或 DecimalFormat 解析(需要指定 Locale),但正则清洗 + Double.parseDouble 在大部分场景下更轻量、更可靠。BigDecimal 处理货币,避免 double 的浮点精度问题(你懂的,0.1 + 0.2 并不等于 0.3)。有了这套方法,不管是 "$1,299.99"、"2,580" 还是 "99.95",都能稳定高效地转成可运算的纯数字,无缝接入你的比价系统或数据分析流程。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述