首页 > 解决方案 > 如何使用 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() 方法的调用导致了这里的问题。

标签: javaregex

解决方案


复制粘贴您的代码并添加一个 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


推荐阅读