Как посчитать количество символов в файле java
У меня есть текстовый файл, и мне было любопытно, какой символ появляется, как часто в тексте.
Любой отзыв оценен.
Выход будет, например:
Ресурсы:
Вы должны начать использовать try-with-resources . Этот статус выполняет некоторые работы для вас с ресурсами, которые реализуют AutoCloseable . Он закрывает эти ресурсы для вас, поэтому вам не нужно беспокоиться о блокировках файлов и остальных подключениях к базе данных:
Вы также не должны бросать Exception в основной метод вашей программы. Это может смутить пользователей. Вместо этого основной метод должен обрабатывать все исключения «изящно», будучи завернутым в блок try-catch .
Conditionals:
Это ранний оператор возврата для следующих условий, то есть вам не нужно писать else if в следующем состоянии .
Нейминг
hashMap не является хорошим именем. Используемая вами карта не является Hash-Map, а treeMap также не будет объяснять, что делает карта, что она содержит .
Возможно, вы захотите переименовать его в characterMap
все остальные равны, ваше именование является хорошим и последовательным, и точно определяет, что делают переменные. Вы прекрасно следуете camelCase -conventions. Продолжайте!
Резюме:
Ваш код читается красиво и легко понятен. Вы следуете соглашениям об именах и имеете описательные и понятные имена переменных. Вы должны работать над обработкой исключений и использованием ресурсов.
Мои заметки в коде:
Я бы переписал класс следующим образом:
Затем я сначала инициализировал отображение символами, такими как
Затем это поможет вам сократить лестницу if-else, например
Все точки в ответе Vogel612 должны быть приняты во внимание. Ваш отказ от закрытия ресурсов - это ваша самая большая проблема.
Моя главная цель с этим ответом - показать, как теперь следует выполнить с Java 8.
Ваш текущий метод использует очень традиционные циклы и условия Java. Вот как код должен выглядеть с API-интерфейсом Java 8:
Этот код имеет ту же функцию, что и ваш код, но значительно короче - он использует новый API Stream Java 8 в сочетании со всеми новые лямбды.
Мы используем метод filter Stream , чтобы вырезать вещи, которые не являются буквами.
Теперь мы используем новый метод Map.merge , который принимает ключ и значение и, кроме того, лямбда, которая принимает два значения. Если ключ не существует на карте, он просто добавляется с заданным значением. Если он существует на карте, то лямбда вызывается с существующим значением и новым значением; значение, возвращаемое из лямбда, затем помещается в карту.
Мы используем метод collect для Stream<Character> , чтобы «уменьшить» поток в изменяемую коллекцию, в этом случае TreeMap .
Наконец, мы используем новый метод forEach на Map , чтобы распечатать содержимое карты.
Как демонстрация возможностей Java 8, чтобы сортировать результат по счету, а не по символу (как и в вашем посте), просто измените печать на:
Определение лимитов персонажей становится критически важным, когда обновления через твиты и посты в Facebook выполняются через API.
Примечание: эта программа не будет работать на онлайн-компиляторах. Пожалуйста, создайте в вашей системе текстовый файл и укажите путь для запуска этой программы в вашей системе.
// Java-программа для подсчета
// количество символов в файле
public class Test
public static void main(String[] args) throws IOException
File file = new File( "C:\\Users\\Mayank\\Desktop\\1.txt" );
FileInputStream fileStream = new FileInputStream(file);
InputStreamReader input = new InputStreamReader(fileStream);
BufferedReader reader = new BufferedReader(input);
int countWord = 0 ;
int sentenceCount = 0 ;
int characterCount = 0 ;
int paragraphCount = 1 ;
int whitespaceCount = 0 ;
// Чтение построчно из
// файл, пока ноль не будет возвращен
while ((line = reader.readLine()) != null )
// // s + это разделитель пространства в java
String[] wordList = line.split( "\\s+" );
whitespaceCount += countWord - 1 ;
// [. ] + это разделитель предложений в java
String[] sentenceList = line.split( "[. ]+" );
System.out.println( "Total word count plain">+ countWord);
System.out.println( "Total number of sentences plain">+ sentenceCount);
System.out.println( "Total number of characters plain">+ characterCount);
System.out.println( "Number of paragraphs plain">+ paragraphCount);
System.out.println( "Total number of whitespaces plain">+ whitespaceCount);
Используемые встроенные функции
- File (String pathname): java.io.File: Создает новый экземпляр File путем преобразования указанной строки пути в абстрактный путь.
Синтаксис: - FileInputStream (File file): java.io.FileInputStream: Создает FileInputStream, открывая соединение с реальным файлом, именем файла которого является объектный файл File в файловой системе.
Синтаксис: - InputStreamReader (InputStream in): java.io.InputStreamReader: создает InputStreamReader, который использует кодировку по умолчанию.
Синтаксис: - BufferedReader (Reader in): java.io.BufferedReader: Создает буферный поток ввода символов, который использует размер буфера ввода по умолчанию.
Синтаксис:
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Это самая быстрая версия, которую я нашел, примерно в 6 раз быстрее, чем readLines. Для файла журнала объемом 150 МБ это занимает 0,35 секунды по сравнению с 2,40 секунд при использовании readLines (). Просто для удовольствия, команда linux 'wc -l занимает 0,15 секунды.
РЕДАКТИРОВАТЬ, 9 с половиной лет спустя: у меня практически нет опыта работы с Java, но в любом случае я пытался сравнить этот код с приведенным ниже решением LineNumberReader , поскольку меня беспокоило, что никто этого не делал. Кажется, что особенно для больших файлов мое решение быстрее. Хотя кажется, что прогон несколько раз, пока оптимизатор не сделает достойную работу. Я немного поиграл с кодом и выпустил новую версию, которая является самой быстрой:
Результаты теста производительности для текстового файла 1,3 ГБ по оси Y в секундах. Я выполнил 100 прогонов с одним и тем же файлом и измерил каждый прогон с помощью System.nanoTime() . Вы можете видеть, что countLinesOld имеет несколько выбросов, а countLinesNew - нет, и хотя это только немного быстрее, разница статистически значима. LineNumberReader явно медленнее.
Я реализовал другое решение проблемы, я нашел его более эффективным при подсчете строк:
Принятый ответ имеет одну ошибку для многострочных файлов, которые не заканчиваются переводом строки. Файл с одной строкой, заканчивающийся без новой строки, вернул бы 1, но файл с двумя строками, заканчивающийся без новой строки, также вернул бы 1. Вот реализация принятого решения, которое исправляет это. Проверки endWithoutNewLine бесполезны для всего, кроме окончательного чтения, но должны быть тривиальными с точки зрения времени по сравнению с общей функцией.
С Java-8 вы можете использовать потоки:
Ответ с помощью метода count (), приведенного выше, дал мне неправильные счета строк, если в файле не было новой строки в конце файла - он не смог посчитать последнюю строку в файле.
Этот метод работает лучше для меня:
Я знаю, что это старый вопрос, но принятое решение не совсем соответствовало тому, что мне было нужно. Итак, я усовершенствовал его, чтобы принимать различные разделители строк (а не просто перевод строки) и использовать указанную кодировку символов (а не ISO-8859-n). Все в одном методе (рефакторинг по необходимости):
Это решение сопоставимо по скорости с принятым решением, примерно на 4% медленнее в моих тестах (хотя временные тесты в Java общеизвестно ненадежны).
Протестировано на JDK8_u31. Но на самом деле производительность низкая по сравнению с этим методом:
Проверено и очень быстро.
Я проверил вышеупомянутые методы для подсчета линий, и вот мои наблюдения для различных методов, которые были проверены на моей системе
Размер файла: 1.6 Гб Методы:
- Использование сканера: 35 с
- с использованием BufferedReader: 5 с
- Используя Java 8: 5 с
- с использованием LineNumberReader: 5 с
Прямой путь с использованием сканера
Я пришел к выводу, что wc -l : s метод подсчета новых строк хорош, но возвращает неинтуитивные результаты для файлов, где последняя строка не заканчивается новой строкой.
И решение @ er.vikas, основанное на LineNumberReader, но добавив его к числу строк, дало неинтуитивные результаты для файлов, где последняя строка заканчивается символом новой строки.
Поэтому я сделал алгоритм, который обрабатывает следующим образом:
И это выглядит так:
Если вы хотите интуитивно понятные результаты, вы можете использовать это. Если вам нужна совместимость с wc -l , просто используйте решение @ er.vikas, но не добавляйте его к результату и повторите попытку:
Как насчет использования класса Process из кода Java? А затем читая вывод команды.
Подсчет символов в файле
Доброе время суток. Есть вопрос: необходимо подсчитать общее число символов, рассортировать их по.
Подсчёт символов в файле.
Подскажите как посчитать количество символов в текстовом файле, какие функции для работы с файлами.
Подсчет символов в файле
Дан текстовый файл, где в первой строке введено некоторое число N. Во второй строке находятся N.
Подсчет символов в файле
Нужно найти сколько в файле букв (а,б,в. ) алфавита. Не могу понять как делать. Начал с самого.
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
Разделены пробелами как выше написано, точно также может быть в файле, по 2 матрицы Размер матрицы можно попробовать посчитать так:
в переменную s считываем первую строку. Затем
dr_yand, я попробовал так сделать, вот как-то так:
dr_yand, спасибо, помогло
а что сделать, чтобы значение переменной n сохранялось на все try'и?)
Добавлено через 40 минут
dr_yand, и ещё маленький вопросик у меня есть строка, которую я ввожу. как сделать так, чтобы выдавался элемент под каким-либо номером i ?
в дальнейшем, он забывает первую строку, и матрицы отображаются не правильно, как этого избежать? т.е. после того как посчитан размер матрицы, у нас теряется одна строка, так? dr_yand, отлично, почти все заработало
только он еще забывает переменную n во втором трае
"Забывает" это теряет значение или не видит?
Если второй вариант, то стоит вынести объявление переменной выше первого try
dr_yand, точно. уже залипаю. еще один глупый вопрос, когда я ввожу любой символ, на вопрос - "какую операцию делаем, шеф?" мне приходится вводить символ 2 раза, чтобы вывело результат, в чем здесь идет загвоздка? dr_yand, без этого выдает ошибки на циклы, где условия на строку:
Подсчет символов в файле
Всем привет! Прошу помощи) Надо написать программу, суть которой заключается вот в чем: программе.
Подсчет символов в текстовом файле.
Помогите пожалуйста! Написать программу на ассемблере подсчитывающую количество символов в.
Подсчет количества символов в файле
дан файл в нем содержится допустим 40 символов нужно чтоб программа подсчитала количество символов.
Подсчет символов в файле. Не пашет
Добрый день! Пытаюсь в никнуть в основу основ С++ при помощи С++ Builder v.6 Есть пример: .
Подсчет количества символов в файле
Есть файл и я хочу считать из него данные и вывести на экран. Вот функция этого действия: void.
Разработать программу, которая читает текстовый файл и проводит частотный анализ текста, т. е. указывает (в процентах), сколько раз встречается та или иная буква. Имя читаемого файла запрашивается с клавиатуры.
На форумах полюбому есть, если у кого имеются наводки, скиньте плз.
__________________Помощь в написании контрольных, курсовых и дипломных работ здесь
Найти количество гласных букв в текстовом файле
В созданном текстовом файле, с русским текстом. Нужно определить количество гласных букв в тексте.
Найти в текстовом файле слова с указанным количеством букв
Мне надо найти в текстовике слова с указанным количеством букв. Вот нарыл про сплин и токенайзер.
Найти слова в текстовом файле которые составлены ТОЛЬКО из гласных букв
Вроде не сложная задача, но как то вообще не идет.Только начал изучать Java. Нужно найти слова в.
Подсчет и сравнение количества букв ‘А’ и ‘О’ в текстовом файле
Составить программу подсчета и сравнения количества букв ‘А’ и букв ‘О’ в заданном текстовом файле.
Решение
Подсчет слов в текстовом файле
кaк пoдсчитaт скoлкo нaпример: слoв 'windows' встречaются в теxтoвoм фaиле пoд нaзвaнием 'data.тxт '
Подсчет символов в текстовом файле.
Помогите пожалуйста! Написать программу на ассемблере подсчитывающую количество символов в.
Подсчет слов в текстовом файле
Добрый день! Пожалуйста помогите. Нужно создать батник, который будет получать в качестве.
Подсчет количества слов в текстовом файле
Добрый день! Помогите пожалуйста написать Батник: Подсчет количества слов в текстовом файле.
Подсчет строк в гигантском текстовом файле > 4 Гб
Всем привет, я новичок в С++, но очень стараюсь. Прочитал Дейтелов и теперь хочу сделать что-то.
Читайте также: