#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, поскольку он вернет более точные результаты.