📜  从Java中的给定字符串中提取所有整数(1)

📅  最后修改于: 2023-12-03 15:36:15.636000             🧑  作者: Mango

从Java中的给定字符串中提取所有整数

在Java中,我们有时需要从一个字符串中提取所有整数。这样的情况可能在很多场景中出现,例如需要对用户输入的字符串进行数字验证、从日志文件中提取数字等等。

下面是几种方法供您参考。

方法一:使用正则表达式

使用正则表达式可以方便地从字符串中提取所有整数。

String input = "There are 3 numbers in this text: 1, 2, and 3.";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    int num = Integer.parseInt(matcher.group());
    System.out.println(num);
}

上面的代码使用正则表达式 \d+ 来匹配所有的数字,然后通过循环和 Integer.parseInt() 方法将匹配到的数字转换为整数并输出。

方法二:使用 StringTokenizer 类

使用 StringTokenizer 类也可以从字符串中提取所有整数。

String input = "There are 3 numbers in this text: 1, 2, and 3.";
StringTokenizer tokenizer = new StringTokenizer(input, " ,.");
while (tokenizer.hasMoreTokens()) {
    String token = tokenizer.nextToken();
    try {
        int num = Integer.parseInt(token);
        System.out.println(num);
    } catch (NumberFormatException e) {
        // Not a number, ignore.
    }
}

上面的代码使用 StringTokenizer 类将字符串按指定分隔符(空格、逗号、句点)拆分成多个 token,并循环遍历每个 token。尝试将每个 token 转换为整数并输出。

方法三:使用 Java 8 Stream API

在 Java 8 中,我们可以使用 Stream API 来提取字符串中的所有整数。

String input = "There are 3 numbers in this text: 1, 2, and 3.";
List<Integer> numbers = Arrays.stream(input.split("\\D+"))
                               .filter(s -> !s.isEmpty())
                               .map(Integer::parseInt)
                               .collect(Collectors.toList());
numbers.forEach(System.out::println);

上面的代码使用 split() 方法将字符串按非数字字符(\D+)拆分成多个子字符串,并将它们转换为整数后存入一个列表(List)中。最后遍历列表并输出每个整数。

总结

以上是三种常用方法,您可以根据自己的实际情况选择其中一种或结合使用。如果您有其他更好的方法,欢迎在评论区分享。