У меня есть задание в ближайшее время, но я все еще очень новичок в Java и знаю только основы. В любом случае мне нужно создать анализатор текста, по которому вычисляется количество слов, символов и строк документа, который я читал.
Я нашел этот код ниже, и я начал его комментировать, однако я не знаю, правильно ли мои комментарии, и я не уверен, что делать без раскопок. Если бы кто-то мог написать короткое объяснение мне или чему-то, я был бы очень благодарен.
//Loops through the file until it has counted everything.
while (in.hasNext()) {
String tmpStr = in.nextLine();
if (!tmpStr.equalsIgnoreCase("")) {
String replaceAll = tmpStr.replaceAll("\\s+", "");
// Counts the number of characters within the file.
charsCount += replaceAll.length();
// Counts the number of words within the file.
wordsCount += tmpStr.split(" ").length;
}
// Counts number of lines
++linesCount;
} //Ends While Loop.
Я предполагаю, что, когда код подсчитывает символы, он игнорирует пробелы. Что бы я изменил, чтобы он также учитывал пробелы.
Вы все помогали нагрузками, с моей работой я теперь понимаю это все больше и больше, чтобы вносить изменения, хотелось бы, чтобы я мог выбрать всех для решения моего ответа, спасибо еще раз :)
У вас, похоже, больше всего. Я попытаюсь подробно объяснить каждый аспект.
while (in.hasNext()) {
...
}
Это основной цикл. Он просто проверяет, есть ли что-нибудь еще на входе, которое вы читаете. Если есть, то он выполняет код между фигурными скобками.
String tmpStr = in.nextLine();
Считывает следующую строку со сканера и назначает ее tmpStr. Здесь есть небольшая пропасть. nextLine() не возвращает символы возврата каретки или новой строки. Если вы должны считать их как символы в своем проекте, ваш счет будет отключен.
if (!tmpStr.equalsIgnoreCase("")) {
...
}
Этот оператор if проверяет, является ли это просто пустой строкой (т.е. Никакими символами), и если это так, пропускает обработку строки. Это оптимизация и не требуется строго для достижения вашей цели.
String replaceAll = tmpStr.replaceAll("\\s+", "");
Это вызов регулярного выражения. Он удаляет все пробелы из строки и сохраняет их как временную переменную. Пробелы включают в себя такие символы, как пробел, вкладка, вертикальная вкладка, фид формы, возврат каретки и т.д. Вы почти наверняка не хотите этого делать, если ваша проблема не определена так, что вам не нужно считать пробелы. Если проблема требует количества символов (пробелы и все), и ваш вход гарантированно будет ASCII, то самым простым решением для подсчета символов будет вернуть размер файла с 1 символа = 1 байт в ASCII. В противном случае проблема становится немного волосатой. Если вы укажете, что определяет персонаж для целей вашего проекта, я могу, вероятно, лучше дать вам рекомендации.
charsCount += replaceAll.length();
Это позволяет считать количество символов без пробелов. Оператор + = принимает значение charsCount раньше и добавляет к нему длину строки в символах после удаления пробела.
wordsCount += tmpStr.split(" ").length;
Split принимает строку и возвращает массив подстрок, которые были разделены по предоставленному символу. В этом случае этот символ является пространством. Таким образом, линия "Быстрая коричневая лиса" вернет массив из четырех предметов "The", "quick", "brown" и "fox". Обратите внимание, что пробелы удаляются. Затем длина массива добавляется к текущему количеству слов. Это довольно наивный способ подсчета слов, поскольку существуют границы слов, которые не являются пробелами. Это включает в себя такие вещи, как tab, em dashes и т.д. Это может работать для ваших целей, но опять же это будет зависеть от параметров вашего проекта.
++linesCount;
Это подсчитывает строки. ++ просто означает "добавить 1" к переменной. Поэтому для каждой итерации цикла while линияCount будет увеличиваться на единицу.
Если вы хотите подсчитать весь символ, включая пробелы, вам нужно удалить replaceAll
, затем подсчитать строки и позже количество слов
//Loops through the file until it has counted everything.
while (in.hasNext()) {
String tmpStr = in.nextLine();
if (!tmpStr.equalsIgnoreCase("")) {
// Counts the number of characters within the file.
charsCount += tmpStr.length();
// Counts the number of words within the file.
wordsCount += tmpStr.split(" ").length;
}
// Counts number of lines
++linesCount;
} //Ends While Loop.
Я попытаюсь объяснить в несколько шагов, как работает этот код
Надеюсь, это все ясно.
Еще несколько комментариев:
// Get the next line from the input
String tmpStr = in.nextLine();
// If the line is not empty ...
if (!tmpStr.equalsIgnoreCase("")) {
// Remove all whitespace from the line
String replaceAll = tmpStr.replaceAll("\\s+", "");
replaceAll
.