Integer.parseInt(scan.next()) или scan.nextInt()?

Я колеблюсь с использованием

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

or

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

Какой из них полезнее, или точнее; что будет работать быстрее?


person El3ctr0n1c4    schedule 07.11.2011    source источник
comment
@AlexanderPogrebnyak А java.util.Scanner.   -  person Josh Lee    schedule 08.11.2011
comment
@ Джош. Преклоняюсь перед вашими способностями к чтению мыслей (и знанием Java-библиотек) :)   -  person Alexander Pogrebnyak    schedule 08.11.2011
comment
Извините, я только что внес исправления   -  person El3ctr0n1c4    schedule 08.11.2011


Ответы (4)


Теперь понятно, что это всего лишь реализация 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());
    }
}
person corsiKa    schedule 07.11.2011

Я чувствую, что scan.nextInt, scan.next может читать символы новой строки, пробелы или другой мусор. Может потребоваться больше времени, чтобы просеять мусорные символы

person SetSlapShot    schedule 07.11.2011

Для какого из них быстрее, я думаю, что ручной анализ Integer.parseInt быстрее, так как scan.nextInt будет выполнять сопоставление на основе регулярного выражения, а затем выполнять Integer.parseInt для этого значения.

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

Ваше здоровье!

person r0ast3d    schedule 07.11.2011

Метод nextInt() более удобен.

Используйте Integer.parseInt(), когда вы применяете проверку пользователя.

Предположим, вы хотите, чтобы ваша программа принимала пользовательский ввод как 5, и вы хотите отображать пользовательское сообщение, когда пользователь вводит '---5', где '--' — это пробелы. В этом случае Integer.parseInt() полезен.

person SHACHINDRA TRIPATHI    schedule 15.09.2017