Integer.parseInt(scan.next())还是scan.nextInt()?

时间:2011-11-07 21:27:42

标签: java performance parseint

我使用

振荡
import java.util.Scanner;
.
.
.
Scanner scan = new Scanner(System.in);
.
.
. 
Integer.parseInt(scan.next());

import java.util.Scanner;
.
.
.    
Scanner scan = new Scanner(System.in);
.
.
.
scan.nextInt();    

哪一个更有用,或更准确;哪个会运行得更快?

4 个答案:

答案 0 :(得分:3)

现在被授予,这只是Sun实现,但下面是nextInt(int radix)实现。

请注意,它使用特殊模式(integerPattern())。这意味着如果您使用next(),您将使用默认模式。现在,如果您刚刚创建new Scanner(),那么您将使用典型的空白模式。但是如果你使用了不同的模式,你就不能确定你会接受一个单词。你可能会选择一条线路。

在一般情况下,我强烈推荐nextInt(),因为它为您提供了抽象,减少了可能出错的情况,以及更多信息。

随意阅读本文:

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());
    }
}

答案 1 :(得分:0)

我的直觉是scan.nextInt,一个scan.next可以读取换行符或空格或其他垃圾。可能需要更长时间来筛选垃圾字符

答案 2 :(得分:0)

对于哪一个更快,我认为手动解析Integer.parseInt更快,因为scan.nextInt将执行基于正则表达式的匹配,然后对该值执行Integer.parseInt

http://download.oracle.com/javase/1,5,0/docs/api/java/util/Scanner.html#nextInt()

干杯!

答案 3 :(得分:0)

nextInt()方法更方便。

在应用用户验证时使用Integer.parseInt()。

假设您希望程序将用户输入设为5,并且您希望在用户键入“--- 5”时显示自定义消息,其中“ - ”是空格。 在这种情况下,Integer.parseInt()很有帮助。