📅  最后修改于: 2023-12-03 15:36:15.636000             🧑  作者: Mango
在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 类也可以从字符串中提取所有整数。
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 来提取字符串中的所有整数。
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)中。最后遍历列表并输出每个整数。
以上是三种常用方法,您可以根据自己的实际情况选择其中一种或结合使用。如果您有其他更好的方法,欢迎在评论区分享。