在Java编程中,使用正则表达式匹配数字和小数点是数据处理、文本分析和输入验证的常见需求。本文将深入讲解如何编写高效、准确的正则表达式来匹配整数和浮点数。
让我们从最简单的整数匹配开始:
// 匹配正整数
String pattern1 = "\\d+";
// 匹配整数(包括正负)
String pattern2 = "-?\\d+";
// 匹配所有整数(包括正负和零)
String pattern3 = "[-+]?\\d+";
匹配浮点数需要特别处理小数点:
// 匹配简单小数(如:3.14)
String floatPattern1 = "\\d+\\.\\d+";
// 匹配正负小数
String floatPattern2 = "[-+]?\\d+\\.\\d+";
// 匹配可能缺少整数部分的小数(如:.5)
String floatPattern3 = "[-+]?\\d*\\.\\d+";
// 匹配可能缺少小数部分的小数(如:5.)
String floatPattern4 = "[-+]?\\d+\\.?\\d*";
最常用的完整数字匹配正则表达式:
// 匹配所有数字(整数和小数)
String completePattern = "[-+]?\\d*\\.?\\d+";
// 更精确的匹配(排除多个小数点)
String precisePattern = "[-+]?(\\d+\\.\\d+|\\.\\d+|\\d+\\.|\\d+)";
以下是完整的Java代码示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberMatcher {
public static void main(String[] args) {
String text = "价格:-12.5元,数量:30,折扣:0.25,温度:-3.14℃";
// 匹配所有数字(包括正负整数和小数)
String regex = "[-+]?\\d*\\.?\\d+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
System.out.println("找到的数字:");
while (matcher.find()) {
System.out.println(matcher.group());
}
// 验证输入是否为有效数字
String[] testNumbers = {"123", "-45.67", ".89", "90.", "abc", "12.34.56"};
String validationRegex = "^[-+]?(\\d+\\.\\d+|\\.\\d+|\\d+\\.|\\d+)$";
for (String num : testNumbers) {
boolean isValid = num.matches(validationRegex);
System.out.println(num + " : " + (isValid ? "有效" : "无效"));
}
}
}
\\d代替[0-9],更简洁\\Pattern.compile()预编译正则表达式以提高性能如果需要匹配科学计数法表示的数字:
// 匹配科学计数法数字
String scientificPattern = "[-+]?\\d*\\.?\\d+[eE][-+]?\\d+";
// 综合匹配(包括普通数字和科学计数法)
String advancedPattern = "[-+]?(\\d+\\.\\d+|\\.\\d+|\\d+\\.|\\d+)([eE][-+]?\\d+)?";
通过掌握这些Java正则表达式技巧,您可以轻松处理各种数字匹配需求,提高代码的健壮性和数据处理能力。