Java 正则表达式提取数字
在 Java 中,可以使用正则表达式来提取字符串中的数字,以下是几种常见的方法:

提取所有数字
import java.util.regex.*;
public class ExtractNumbers {
public static void main(String[] args) {
String text = "abc123def456ghi789";
// 正则表达式匹配一个或多个数字
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("找到数字: " + matcher.group());
}
}
}
输出:
找到数字: 123
找到数字: 456
找到数字: 789
提取特定格式的数字
提取整数
Pattern pattern = Pattern.compile("-?\\d+"); // 可选负号后跟数字
提取浮点数
Pattern pattern = Pattern.compile("-?\\d+\\.\\d+"); // 匹配如 123.456
提取科学计数法数字
Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?[eE][+-]?\\d+"); // 匹配如 1.23e-4
提取数字并转换为类型
import java.util.regex.*;
import java.util.ArrayList;
import java.util.List;
public class ExtractNumbersAsInt {
public static void main(String[] args) {
String text = "年龄: 25, 体重: 65.5kg, 分数: 89.75";
// 提取整数
Pattern intPattern = Pattern.compile("\\d+");
Matcher intMatcher = intPattern.matcher(text);
List<Integer> integers = new ArrayList<>();
while (intMatcher.find()) {
integers.add(Integer.parseInt(intMatcher.group()));
}
System.out.println("整数列表: " + integers);
// 提取浮点数
Pattern doublePattern = Pattern.compile("\\d+\\.\\d+");
Matcher doubleMatcher = doublePattern.matcher(text);
List<Double> doubles = new ArrayList<>();
while (doubleMatcher.find()) {
doubles.add(Double.parseDouble(doubleMatcher.group()));
}
System.out.println("浮点数列表: " + doubles);
}
}
从字符串中提取所有数字并求和
import java.util.regex.*;
public class SumNumbers {
public static void main(String[] args) {
String text = "我有3个苹果,5个橙子,2.5公斤香蕉";
// 匹配整数和小数
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(text);
double sum = 0;
while (matcher.find()) {
String numStr = matcher.group();
double num = Double.parseDouble(numStr);
sum += num;
System.out.println("找到数字: " + num);
}
System.out.println("数字总和: " + sum);
}
}
常用数字正则表达式总结
| 需求 | 正则表达式 | 说明 |
|---|---|---|
| 匹配整数 | \d+ |
一个或多个数字 |
| 匹配负整数 | -?\d+ |
可选负号后跟数字 |
| 匹配浮点数 | \d+\.\d+ |
数字.数字 |
| 匹配科学计数法 | \d+[eE][+-]?\d+ |
如 1e10 或 2.3E-4 |
| 匹配整数或浮点数 | \d+(\.\d+)? |
可选小数部分 |
| 匹配带千位分隔符的数字 | \d{1,3}(,\d{3})*(\.\d+)? |
如 1,234.56 |
希望这些示例能帮助你在 Java 中使用正则表达式提取数字!

