Наиболее эффективный способ прочитать одно целое число только из файла? - PullRequest
3 голосов
/ 18 июня 2009

Пытаясь решить головоломку Facebook "Hoppity Hop", http://www.facebook.com/careers/puzzles.php?puzzle_id=7, Я читаю одно целое число только из файла. Мне интересно, это самый эффективный механизм для этого?

private static int readSoleInteger(String path) throws IOException {
    BufferedReader buffer = null;
    int integer = 0;

    try {
        String integerAsString = null;

        buffer = new BufferedReader(new FileReader(path));

        // Read the first line only.
        integerAsString = buffer.readLine();

        // Remove any surplus whitespace.
        integerAsString = integerAsString.trim();

        integer = Integer.parseInt(integerAsString);
    } finally {
        buffer.close();
    }

    return integer;
}

Я видел Как мне создать строку Java из содержимого файла? , но я не знаю эффективности идиомы, которая отвечает на этот вопрос.

Глядя на мой код, кажется, что он содержит много строк кода и объектов для тривиальной задачи ...

Ответы [ 2 ]

8 голосов
/ 18 июня 2009

самый короткий метод будет с Scanner:

private static int readSoleInteger(String path) {
    Scanner s = new Scanner(new File(path));
    int ret = s.nextInt();
    s.close();
    return ret;
}

Обратите внимание, что Scanner глотает любые IOExceptions, так что это сильно упрощает.

Что касается "наиболее эффективного" ... ну, простой процесс открытия файла с диска, вероятно, будет самой медленной частью любого метода, который вы пишете для этого. В этом случае не стоит слишком беспокоиться об эффективности.

Редактировать: Я не понял, что целое число может иметь пробел по обе стороны от него. Мой код не учитывает это в настоящее время, но легко заставить Scanner пропустить вещи . Я добавил строку

s.skip("\\s+");

чтобы исправить это.

Редактировать 2: Неважно, Scanner игнорирует пробелы при попытке разобрать числа:

Строки, которые могут быть проанализированы в виде чисел экземпляром этого класса, определяются в терминах следующей грамматики регулярных выражений:

(регулярные выражения отрублены)

Пробел не имеет значения в приведенных выше регулярных выражениях.

4 голосов
/ 18 июня 2009

Я бы использовал Сканер класс:

Scanner sc = new Scanner(new File("my_file"));
int some_int = sc.nextInt();
...