我的教授倾向于执行以下操作来从用户那里获得一个号码:
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
除了其他的轨迹外,还调用Integer.parseInt()本身。简单地做会带来显着的性能提升Integer.parseInt(scanner.nextLine())
吗?另一方面是否有任何弊端?
扫描包含大量数据而不是用户输入的文件时怎么样?
有2个观察结果:
myScannerInstance.nextInt()
在新行字符后面使用叶子。因此,如果在nextLine()
之后调用nextInt()
,nextLine()
则会读取换行符,而不是实际数据。因此,您将不得不在之后添加另一个nextLine()
,nextInt()
以吞噬该 悬挂 的换行符。nextLine()
不会留下换行符。代码:
int age=myScannerInstance.nextInt();
String name = myScannerInstance.nextLine();// here the actual name will not be read. The new line character will be read.
nextInt()
将再次返回基础流并读取。IO调用花费时间(昂贵)。它将进行大量检查以获取下一个整数。nextLine()
只会做一次检查。因此,如果调用nextLine()
一次并读取5个整数(作为单行String),将其拆分并解析为整数(使用Integer.parseInt()
),则比分别读取每个int更快,更高效。在运行非常大的循环时,使用nextLine()
+ parseInt()
将为您带来巨大的性能优势。
用法:
使用nextInt()
具有其他优势,如果输入文本不是整数,则将获得异常。例子123
被接受..
123sdsa
将抛出一个InputMismatchException
。因此,您可以捕获并适当地处理它。
using nextLine()
将读取整行,因此,它将读取整个String
sada1231
,NumberFormatException
如果无法将String解析为数字,则会失败。您将不得不处理该异常。
通常,一个nextLine()
/ nextInt()
通话不会有太大的区别。如果您有循环,或者正在读取大量数据,则使用readLine()
with
parseInt()
将非常有效。
我必须得到一个字符串输入和一个整数输入,但输入的顺序应该是整数在先,然后要求用户输入字符串 上面的代码工作得很好,但是如果我首先输入一个整数,就像下面的代码 然后抛出java.lang.ArrayIndexOutOfBoundsException。 下面是我源文件的完整代码: 公共类StringSwap{ } 请指出我在这里做错了什么。
问题内容: 尝试使用中的方法时遇到麻烦。 这是我尝试过的: 示例1:此示例按预期方式工作。该行;等待输入,然后再继续。 产生输出: 示例2:此示例无法正常工作。本示例使用while循环以及结构允许用户选择要执行的操作。一旦程序到达;,它就不会等待输入,而是执行该行;。 产生输出: 这使得不可能输入句子。 为什么示例不能按预期工作?唯一之间的区别。和是那个 具有循环和结构。我不明白为什么这会影响的行
嘿,我正在用JMeter为web应用程序编写一些beanshell脚本。我已经编写了很多嵌入beanshell的jmeter脚本,由于某种原因,这个脚本总是给我带来integer.parseint()方法调用的错误。 错误如下: 下面列出了我所有的integer.parseint()调用,它们在我看来都是非常合法的,如果有人是beanshell专家,可以帮助我识别错误,那就太棒了,谢谢! 而且..
问题内容: 我在Android应用中运行了以下代码 在Android 5.0(Lollipop)中,它 没有 引发任何整数异常。但是在Android 4.4.x (KitKat)和更低版本中,它抛出: NumberFormatException:无效的Int:“ +91” Android版本如何造成这种差异? 问题答案: 在此提交中添加了对显式的支持: 从开始包含在内。如果您已获取Git存储库,则
问题内容: 我以前有几种方法用于接受用户输入,并将其作为某种数据类型返回给调用它的方法。我在以前的项目中使用过这些方法或它们的变体。 我采用了用于字符串的方法来选择给定的第一个字符并返回它,以便可以在菜单中使用它。每次我启动该应用程序时,都会出现主菜单,并等待用户输入。收到此输入后,程序将连续循环直到停止。这是我捕获字符的方法: 由于try / catch块,代码循环,因为scan.nextLin
我完全是Java的初学者。我制作了一个类,想输入一个数字和一个字符串,但我认为s=in。nextLine() 忽略此行。如何逐行输入两个值。