java - 如何使用 find() 方法从字符串中提取所有数字?
问题描述
我有一个带有数字的字符串,但不仅是数字(实际上任何字母数字字符都可能存在),我必须从该字符串中提取每个有效的正整数并将其添加到列表中。
我试过使用 find() 方法和模式 "\d+" 但是当输入字符串以整数开头时会出现问题。不会提取输入字符串开头的那个整数。
Pattern reg = Pattern.compile("\\d+");
Matcher test = reg.matcher( "988 5454 754");
boolean matches = test.matches();
List<String> numbers = new ArrayList<>();
while (test.find()) {
numbers.add(test.group(0));
}
我希望第一次迭代中的第 0 组包含 988、第二次 5454 和第三次 754,但是当字符串以整数开头时,它无法提取数字 988。
我只提取数字 5454 和 754。
我的正则表达式模式有什么错误吗?
编辑:我已经完成了代码。您可以看到,matches() 方法的调用导致了这里的问题。
解决方案
复制粘贴您的代码并添加一个 sysout。它正在打印 3 个数字。可能在阅读数字时您可能错过了第一个数字。检查您如何遍历列表。
Pattern reg = Pattern.compile("\\d+");
Matcher test = reg.matcher( "988 5454 754");
List<String> numbers = new ArrayList<>();
while (test.find()) {
numbers.add(test.group(0));
}
Iterator<String> it = numbers.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
输出:988 5454 754
推荐阅读
- java - 如何限制用户在java中输入4位密码
- mysql - 如何从表中拆分数据并插入新关系?
- mysql - MySQL,使用带有子查询的索引
- ruby-on-rails - “exec_query”是否需要“with_connection”?
- javascript - 将角形分割成多个部分
- asp.net - 我可以调用 Web 服务但无法从 WEB SERVICE 获得响应
- java - 在泛型类的静态类中使用泛型类型
- excel - 在受保护的工作表上启用宏按钮 - Excel
- java - 我在 Spring Boot 中运行 shell 命令,但 process = Runtime.getRuntime().exec(cmd) 不运行
- django - 计算 NDB 库中记录数的最佳方法