gpt4 book ai didi

java - Integer.parseInt(scanner.nextLine()) 与 scanner.nextInt()

转载 作者:搜寻专家 更新时间:2023-11-01 01:34:01 27 4
gpt4 key购买 nike

我的教授倾向于执行以下操作以从用户那里获取数字:

Scanner scanner = new Scanner(System.in);
Integer.parseInt(scanner.nextLine());

与简单地执行 scanner.nextInt() 相比有什么好处?

java.util.Scanner.java 包含以下内容:

public int nextInt() {
return nextInt(defaultRadix);
}

public int nextInt(int radix) {
// Check cached result
if ((typeCache != null) && (typeCache instanceof Integer)
&& this.radix == radix) {
int val = ((Integer)typeCache).intValue();
useTypeCache();
return val;
}
setRadix(radix);
clearCaches();
// Search for next int
try {
String s = next(integerPattern());
if (matcher.group(SIMPLE_GROUP_INDEX) == null)
s = processIntegerToken(s);
return Integer.parseInt(s, radix);
} catch (NumberFormatException nfe) {
position = matcher.start(); // don't skip bad token
throw new InputMismatchException(nfe.getMessage());
}
}

如我所见,Scanner 除了额外的 hocus pocus 之外,还会调用 Integer.parseInt() 本身。简单地执行 Integer.parseInt(scanner.nextLine()) 是否有显着的性能提升?另一方面有什么缺点吗?

当扫描包含大量数据而不是用户输入的文件时怎么样?

最佳答案

有 2 个观察结果:

  1. 使用 myScannerInstance.nextInt() 留下换行符。因此,如果您在 nextInt() 之后调用 nextLine()nextLine() 将读取换行符而不是实际数据。因此,您必须在 nextInt() 之后添加另一个 nextLine() 以吞噬那个悬空 换行符。 nextLine() 不留下换行符。

代码:

int age=myScannerInstance.nextInt();
String name = myScannerInstance.nextLine();// here the actual name will not be read. The new line character will be read.
  1. nextInt() 将再次返回底层流并读取。 IO 调用需要时间(昂贵)。它将进行大量检查以获得下一个整数。 nextLine() 只会进行一次这些检查。因此,如果您调用一次 nextLine() 并读取 5 个整数(作为单行字符串),将它们拆分并将它们解析为整数(使用 Integer.parseInt()) ,这将比单独读取每个 int 更快、更有效。

在运行非常大的循环时,使用 nextLine() + parseInt() 将为您带来巨大的性能优势。

用法:

使用 nextInt() 为您提供了一个额外的优势,如果输入文本不是整数,您将得到一个异常。示例 123 被接受。123sdsa 将抛出一个 InputMismatchException。因此,您可以捕获它并适本地处理它。

使用 nextLine() 将读取整行,因此,它将读取整个字符串 sada1231 ,然后失败并返回 NumberFormatException 如果它无法将字符串解析为数字。您将必须处理该异常。

一般来说,一次 nextLine()/nextInt() 调用不会有太大区别。如果你有一个循环或者如果你正在读取大量数据,那么将 readLine()parseInt() 一起使用将非常有效。

关于java - Integer.parseInt(scanner.nextLine()) 与 scanner.nextInt(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26586489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com