Integer.parseInt (scan.next ()) или scan.nextInt ()? - PullRequest
1 голос
/ 08 ноября 2011

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

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 ]

3 голосов
/ 08 ноября 2011

Теперь предоставлено, это только реализация 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());
    }
}
0 голосов
/ 15 сентября 2017

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

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

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

0 голосов
/ 08 ноября 2011

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

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

ура!

0 голосов
/ 08 ноября 2011

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

...