如何判断字符串数字使用小数点还是逗号作为小数分隔符
用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
相关产品推荐
相关产品推荐

