java提取字符串中所有数字的核心方法有三:一是用正则d+匹配连续数字子串并收集;二是用d或遍历+isdigit提取单个数字字符;三是结合replaceall或stream处理。

Java 中提取字符串中所有数字,核心思路是遍历字符、判断是否为数字字符,再拼接或收集。常用方法有正则表达式、循环遍历、Java 8 Stream 等,下面介绍几种实用且易懂的方式。
用正则表达式提取所有连续数字(推荐)
如果目标是提取字符串中**所有连续的数字子串**(如 "abc123def45" → ["123", "45"]),正则 \d+ 最简洁:
- 使用
Pattern.compile("\d+").matcher(str)遍历匹配项 - 每次调用
matcher.find()获取一个数字字符串 - 适合保留多位数原样(不拆成单个数字)
示例代码:
String str = "Room 102, floor 3, ext. 9876";
List<string> numbers = new ArrayList();
Matcher m = Pattern.compile("\d+").matcher(str);
while (m.find()) {
numbers.add(m.group());
}
// 结果:["102", "3", "9876"]
</string>
提取字符串中所有单个数字字符(0–9)
如果需要把每个数字字符单独取出(如 "a1b2c3" → ["1","2","3"]),可用正则 d 或遍历判断:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
str.replaceAll("[^0-9]", "")得到纯数字字符串,再转为字符数组或逐个处理 - 或用
str.chars().filter(Character::isDigit).mapToObj(c -> String.valueOf((char)c)) - 注意:
Character.isDigit(c)比c >= '0' && c 更严谨(支持 Unicode 数字)
用 for 循环手动遍历(最直观,适合初学者)
逐个检查每个字符是否为数字,遇到就添加到结果中:
- 用
str.charAt(i)取字符,用Character.isDigit()判断 - 可选择拼成一个长数字串,或存入 List 保留分隔
- 逻辑清晰,无依赖,调试方便
示例(提取单个数字字符):
String str = "Price: $29.99 (was $39)"; StringBuilder digits = new StringBuilder(); for (int i = 0; i
注意事项和常见误区
实际使用时容易忽略几点:
- 中文数字(如“一”、“二”)或罗马数字不属于
\d或Character.isDigit()范围,需额外处理 -
\d在某些正则引擎中可能匹配 Unicode 数字(如阿拉伯数字),但 Java 默认只匹配 ASCII 0–9;如需更广匹配,可用\p{Digit} - 负号、小数点、逗号不是数字字符,不会被提取——若需提取浮点数或带符号数,正则要升级为
-?\d+\.?\d*并做额外校验
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










