You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断字符串数字使用小数点还是逗号作为小数分隔符

用matches方法判断数字字符串的小数分隔符

你的原正则无法匹配是因为没考虑千位分隔符的存在——示例字符串里的逗号/点是千位分隔符,而小数分隔符只会出现一次,且在小数部分前。以下是修正后的实现:

核心思路

  • 用点.做小数分隔符的数字:整数部分用逗号,做千位分隔(每三位一组),最后以.\d+结尾;也可能没有千位分隔,直接是整数.小数格式
  • 用逗号,做小数分隔符的数字:整数部分用点.做千位分隔,最后以,\d+结尾;也可能没有千位分隔,直接是整数,小数格式

代码实现

public class DecimalSeparatorCheck {
    public static void main(String[] args) {
        String strNumber = "1,431,936.00"; // 小数点为小数分隔符
        String strNumber2 = "1.431.936,00"; // 逗号为小数分隔符
        String strNumber3 = "123.45"; // 无千位分隔,点为小数分隔符
        String strNumber4 = "123,45"; // 无千位分隔,逗号为小数分隔符

        // 判断是否使用点作为小数分隔符的正则
        String dotDecimalRegex = "^(\\d{1,3}(,\\d{3})*)?\\.\\d+$|^\\d+\\.\\d+$";
        // 判断是否使用逗号作为小数分隔符的正则
        String commaDecimalRegex = "^(\\d{1,3}(\\.\\d{3})*)?,\\d+$|^\\d+,\\d+$";

        if (strNumber.matches(dotDecimalRegex)) {
            System.out.println("使用小数点作为小数分隔符");
        }

        if (strNumber2.matches(commaDecimalRegex)) {
            System.out.println("使用逗号作为小数分隔符");
        }

        // 测试无千位分隔的情况
        if (strNumber3.matches(dotDecimalRegex)) {
            System.out.println("strNumber3 使用小数点作为小数分隔符");
        }
        if (strNumber4.matches(commaDecimalRegex)) {
            System.out.println("strNumber4 使用逗号作为小数分隔符");
        }
    }
}

正则说明

  • \d{1,3}(,\d{3})*:匹配带逗号千位分隔的整数部分(比如1、1,431、1,431,936)
  • \.\\d+:匹配小数点后接至少一位小数
  • 正则中的|表示两种情况的或:带千位分隔的数字,或不带千位分隔的纯小数格式数字

内容的提问来源于stack exchange,提问作者onsir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:26:27