Подсчет количества символов в файле - PullRequest
0 голосов
/ 31 марта 2010

Я пишу программу, которая для одной части просит программу напечатать, сколько символов (включая пробелы) в файле. Хотя код, который у меня есть сейчас, каждый раз возвращает 0, и я не уверен, почему он не учитывает символы.

public int getcharCount(Scanner textFile) {

        int count = 0;

        while(textFile.hasNext()) {
            String line = textFile.nextLine();
            for(int i=0; i < line.length(); i++)
                count++;
        }   
        return count;

    }

Изменить: спецификации для моей программы говорят, что я должен использовать сканер. Я не верю, что это делает для цикла, хотя я не уверен. Когда я использовал ту же технику для подсчета количества строк в файле, он работал отлично. Этот код был:

 public int getLineCount(Scanner textFile) {
    int lineCount = 0;

    while(textFile.hasNext()) {
        String line = textFile.nextLine();
        lineCount++;
    }

    return lineCount;
}

И мы не обязаны проверять, содержит ли строка что-нибудь или нет. Если он появляется в середине текстового файла, его следует считать одним символом.

Ответы [ 6 ]

6 голосов
/ 31 марта 2010

Я не знаю, почему это не работает (и код ниже не исправит это), но

  for(int i=0; i < line.length(); i++)
            count++;

можно записать более кратко, как

  count += line.length();
4 голосов
/ 31 марта 2010

Почему вы используете сканер? Простого читателя будет достаточно. Если вы настаиваете на использовании сканера, вы должны понимать, что он делит свой ввод на поля, разделенные неким шаблоном (пробел по умолчанию), возможно, можно установить пустой шаблон так, чтобы поля соответствовали символам (но, опять же, это быть излишним, просто используйте Reader)

1 голос
/ 31 марта 2010

Вы уже прочитали все со сканера, прежде чем передать его на getcharCount()?

0 голосов
/ 31 марта 2010

Я не слишком много работал со Сканером, но не буду

textFile.hasNextline();

имеет смысл немного больше, чем

textFile.hasNext();

Просто мысль - я не уверен, окажет ли это какое-либо существенное влияние на исполнение

0 голосов
/ 31 марта 2010

Какой разделитель вы устанавливаете для сканера? Вы не показываете это в своем коде, но вам нужно, чтобы она воспринимала строку как один токен.

scanner.useDelimiter("\n");

Кроме того, вы говорите, что второй пример кода работал отлично. Вы распечатали значение строки, чтобы убедиться, что она содержит что-нибудь? Возможно, он правильно посчитал строки, но если строка на самом деле ничего не содержала, это помогло бы объяснить, почему она не входит в цикл for.

0 голосов
/ 31 марта 2010

Вам необходимо назначить файл, открыть его и сбросить в начало. Вы не показываете ничего из этого.

...