Как посчитать количество символов в файле java

Обновлено: 03.07.2024

У меня есть текстовый файл, и мне было любопытно, какой символ появляется, как часто в тексте.

Любой отзыв оценен.

Выход будет, например:

Ресурсы:

Вы должны начать использовать 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);

Используемые встроенные функции

  1. File (String pathname): java.io.File: Создает новый экземпляр File путем преобразования указанной строки пути в абстрактный путь.
    Синтаксис:
  2. FileInputStream (File file): java.io.FileInputStream: Создает FileInputStream, открывая соединение с реальным файлом, именем файла которого является объектный файл File в файловой системе.
    Синтаксис:
  3. InputStreamReader (InputStream in): java.io.InputStreamReader: создает InputStreamReader, который использует кодировку по умолчанию.
    Синтаксис:
  4. 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 явно медленнее.

Benchmark Plot

Я реализовал другое решение проблемы, я нашел его более эффективным при подсчете строк:

Принятый ответ имеет одну ошибку для многострочных файлов, которые не заканчиваются переводом строки. Файл с одной строкой, заканчивающийся без новой строки, вернул бы 1, но файл с двумя строками, заканчивающийся без новой строки, также вернул бы 1. Вот реализация принятого решения, которое исправляет это. Проверки endWithoutNewLine бесполезны для всего, кроме окончательного чтения, но должны быть тривиальными с точки зрения времени по сравнению с общей функцией.

С Java-8 вы можете использовать потоки:

Ответ с помощью метода count (), приведенного выше, дал мне неправильные счета строк, если в файле не было новой строки в конце файла - он не смог посчитать последнюю строку в файле.

Этот метод работает лучше для меня:

Я знаю, что это старый вопрос, но принятое решение не совсем соответствовало тому, что мне было нужно. Итак, я усовершенствовал его, чтобы принимать различные разделители строк (а не просто перевод строки) и использовать указанную кодировку символов (а не ISO-8859-n). Все в одном методе (рефакторинг по необходимости):

Это решение сопоставимо по скорости с принятым решением, примерно на 4% медленнее в моих тестах (хотя временные тесты в Java общеизвестно ненадежны).

Протестировано на JDK8_u31. Но на самом деле производительность низкая по сравнению с этим методом:

Проверено и очень быстро.

Я проверил вышеупомянутые методы для подсчета линий, и вот мои наблюдения для различных методов, которые были проверены на моей системе

Размер файла: 1.6 Гб Методы:

  1. Использование сканера: 35 с
  2. с использованием BufferedReader: 5 с
  3. Используя Java 8: 5 с
  4. с использованием 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 ?

Если я правильно понял, вы вводите строку, например, "12 54 8 90" и необходимо вывести элемент под номером 2, так? dr_yand, спасибо, но еще есть вопрос, по вашему совету
в дальнейшем, он забывает первую строку, и матрицы отображаются не правильно, как этого избежать? т.е. после того как посчитан размер матрицы, у нас теряется одна строка, так? 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 Гб
Всем привет, я новичок в С++, но очень стараюсь. Прочитал Дейтелов и теперь хочу сделать что-то.

Читайте также: