Количество конфликтующих символов

#java

#java

Вопрос:

Я пытаюсь найти количество символов в данном текстовом файле.

Я пробовал использовать как сканер, так и BufferedReader, но получаю противоречивые результаты. С помощью сканера я объединяю каждую строку после добавления нового символа строки. Например, вот так:

     FileReader reader = new FileReader("sampleFile.txt");
    Scanner lineScanner = new Scanner(reader);
    String totalLines = "";

    while (lineScanner.hasNextLine()){
        String line = lineScanner.nextLine() 'n';
        totalLines  = line;
    }
    System.out.println("Count " totalLines.length());
  

Это возвращает истинное количество символов для моего файла, которое равно 5799

В то время как когда я использую:

  BufferedReader reader = new BufferedReader(new FileReader("sample.txt"));

 int i;
 int count = 0;
 while ((i = in.read()) != -1) {
    count  ;
 }

 System.out.println("Count " count);
  

Я получаю 5892.

Я знаю, что использование lineScanner будет отключено на единицу, если есть только одна строка, но для моего текстового файла я получаю правильный вывод.

Также в notepad длина файла в байтах равна 5892, но количество символов без пробелов равно 5706.

Комментарии:

1. итак, в чем именно ваш вопрос?

2. @PTBG Мой вопрос в том, почему я получаю разные ответы, используя сканер или буферизованный считыватель?

3. Хорошо, я только что проверил, и разница связана с тем, что сканер не считает ‘ r’. Если бы я запустил этот код в Linux, получил бы я другой результат?

Ответ №1:

Ваш файл может иметь строки, заканчивающиеся rn символом, а не n . Это может привести к вашему несоответствию.

Комментарии:

1. Да, но мне сказали, что текстовый файл содержит 5799 символов, если только мой учитель не рассчитал его неправильно.

Ответ №2:

Вы должны учитывать символ перевода строки / возврата каретки в текстовом файле. Это также считается символом.

Я бы предложил использовать BufferedReader, поскольку он вернет более точные результаты.