java中提取字符串中的数字需用pattern和matcher配合find()方法,正则d+可匹配连续数字,支持单个或多个数字提取;如需负数或小数,正则应改为-?d+(.d+)?,生产环境建议提取后用parsedouble并捕获异常。

Java 中用正则表达式从 String 提取数字,不能直接用 match()(该方法只判断是否匹配整个字符串),而应使用 Pattern 和 Matcher 配合 find() 来逐个提取数字子串。
提取所有连续数字(如 "abc123def45" → ["123", "45"])
核心思路:用正则 \d+ 匹配一个或多个连续数字,配合 Matcher.find() 循环捕获。
示例代码:
String text = "abc123def45gh6789";
Pattern pattern = Pattern.compile("\d+");
Matcher matcher = pattern.matcher(text);
List<string> numbers = new ArrayList();
while (matcher.find()) {
numbers.add(matcher.group()); // 每次匹配到的数字字符串
}
// numbers = ["123", "45", "6789"]
</string>
提取单个数字(只取第一个出现的数字)
如果只需第一个数字,调用一次 find() 即可,避免遍历全部。
- 用
matcher.find()判断是否存在匹配 - 存在则用
matcher.group()获取匹配内容 - 若要转成
int,可用Integer.parseInt(matcher.group())
提取带符号或小数的数字(如 "-12.34")
基础 \d+ 只匹配非负整数。如需支持负数、小数,正则需增强:
- 整数(含负号):
-?\d+ - 小数(简单版):
-?\d+\.\d+ - 更健壮的小数(支持 .5 或 5.):
-?\d*\.?\d+,但建议用-?\d+(\.\d+)?更清晰
注意:浮点数格式复杂,生产环境推荐先提取再用 Double.parseDouble() 尝试转换,捕获 NumberFormatException 做容错。
只提取纯数字,忽略字母混排中的部分(如 "a1b2c3" → ["1","2","3"])
此时应仍用 \d+ —— 它天然按“连续数字”切分,a1b2c3 中的 1、2、3 各自长度为 1,会被分别匹配出来,无需额外处理。
不需要写 \d(单个数字),因为 \d+ 已能覆盖单个和多个场景,更通用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











