Java如何简化带逗号的数字字符串处理 得到无多余零的字符串结果
解决方案
方案1:使用NumberFormat规范解析(推荐)
这种方式适配性更强,即使后续Excel导出的数字格式有小调整也不容易出错,符合数字格式解析的标准实现:
import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; // 核心处理逻辑 public String formatExcelNumber(String cellValue) throws ParseException { // 去除首尾空白 String trimmed = cellValue.trim(); // 用US地区的数字格式解析千分位逗号 Number number = NumberFormat.getInstance(Locale.US).parse(trimmed); // 转BigDecimal去除末尾无意义的零,转普通字符串避免科学计数法 return new BigDecimal(number.toString()).stripTrailingZeros().toPlainString(); } // 调用示例 String value = formatExcelNumber(valueCell.getStringCellValue());
如果能100%确定输入格式符合要求不需要单独处理异常,也可以简化为链式调用:
String value = new BigDecimal(NumberFormat.getInstance(Locale.US).parse(valueCell.getStringCellValue().trim()).toString()).stripTrailingZeros().toPlainString();
方案2:正则替换(轻量简洁)
如果能确保输入的字符串都是固定的「千分位+两位小数」格式,用正则替换可以大幅简化代码:
String value = valueCell.getStringCellValue() .trim() .replace(",", "") .replaceAll("(\\.\\d*[1-9])?0+$", "$1") .replaceAll("\\.$", "");
正则逻辑说明:
- 先移除所有千分位逗号
- 匹配末尾的所有0,如果0前面是带非0数字的小数部分,就只保留前面的非0小数部分,否则全部抹掉末尾的0序列
- 最后处理整数场景,去掉多余的末尾小数点
内容的提问来源于stack exchange,提问作者JCALTS ako
相关产品推荐
相关产品推荐

