如何去除负数字母数字字符串前导零并转换为BigDecimal等金额数值类型
最优方案(优先推荐,适配美元金额场景)
因为你最终需要转数值类型,完全不需要手动处理前导零,直接用BigDecimal的构造方法即可,原生支持带负号、前导零的数字字符串,完全适配金融金额处理要求:
import java.math.BigDecimal; import java.math.RoundingMode; String input = "-00000050.43"; // 直接构造即可自动识别前导零和负号 BigDecimal amount = new BigDecimal(input); // 如果需要统一保留2位小数,按美元金额常用的四舍五入规则处理 BigDecimal standardAmount = amount.setScale(2, RoundingMode.HALF_UP); // 最终输出为 -50.43
该方案天然规避了字符串处理的边界问题,例如-0000.00这类特殊输入也能正确转换为0.00。
适配负数的字符串处理方案
如果你的业务流程需要先清洗字符串再转数值,可以修改你原来的3种方案兼容负号:
1. 正则表达式方案
调整正则匹配规则,保留负号的同时替换后续前导零:
String result = "-00000050.43".replaceFirst("^(-?)0+(?!$)", "$1");
2. Apache Commons方案
拆分符号位和数值位分开处理:
import org.apache.commons.lang3.StringUtils; String input = "-00000050.43"; String result; if (input.startsWith("-")) { result = "-" + StringUtils.stripStart(input.substring(1), "0"); } else { result = StringUtils.stripStart(input, "0"); }
3. Google Guava方案
逻辑和Apache Commons方案一致,拆分处理符号和数值:
import com.google.common.base.CharMatcher; String input = "-00000050.43"; String result; if (input.startsWith("-")) { result = "-" + CharMatcher.is('0').trimLeadingFrom(input.substring(1)); } else { result = CharMatcher.is('0').trimLeadingFrom(input); }
内容的提问来源于stack exchange,提问作者NPE_founder
相关产品推荐
相关产品推荐

