Java 正则表达式匹配 Double 类型
在 Java 中,可以使用正则表达式来验证或提取 Double 类型的字符串,以下是一些常用的正则表达式模式:

基本 Double 匹配模式
简单的 Double 匹配(包括正负号、小数点)
String doublePattern = "[-+]?[0-9]*\\.?[0-9]+";
这个模式可以匹配:
- 可选的正负号
[-+]? - 零个或多个数字
[0-9]* - 可选的小数点
\\.? - 一个或多个数字
[0-9]+
更严格的 Double 匹配(要求至少一位整数或小数部分)
String doublePattern = "[-+]?[0-9]+(\\.[0-9]+)?";
这个模式要求:
- 可选的正负号
- 至少一位整数部分
[0-9]+ - 可选的小数部分
(\\.[0-9]+)?
完整的 Double 匹配(考虑科学计数法)
如果需要匹配科学计数法表示的 Double:
String doublePattern = "[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?";
这个模式添加了科学计数法部分:

- 可选的指数部分
([eE][-+]?[0-9]+)?
实际使用示例
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class DoubleRegexExample {
public static void main(String[] args) {
String[] testValues = {
"123.45", "-123.45", ".45", "123.",
"1e10", "1.23e-5", "abc", "123.45.67"
};
// 严格的Double匹配模式
String doublePattern = "[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?";
Pattern pattern = Pattern.compile(doublePattern);
for (String value : testValues) {
Matcher matcher = pattern.matcher(value);
if (matcher.matches()) {
System.out.println(value + " 是有效的Double");
} else {
System.out.println(value + " 不是有效的Double");
}
}
}
}
注意事项
-
精度问题:正则表达式只能验证字符串格式是否符合Double,不能验证数值范围是否在Double的有效范围内。
-
前导零:上述模式允许前导零(如"001.23"),如果需要禁止前导零,可以修改模式为:
String doublePattern = "[-+]?([1-9][0-9]*|0)(\\.[0-9]+)?([eE][-+]?[0-9]+)?";
-
性能考虑:对于频繁的Double验证,考虑使用
Double.parseDouble()并捕获NumberFormatException,这通常比正则表达式更高效。 -
国际化:如果需要考虑不同地区的数字格式(如逗号作为小数点),需要调整正则表达式或使用
NumberFormat类。
(图片来源网络,侵删)
希望这些信息对你有帮助!
