Английские буквы

  • 10
  • Недоступна
В метод main первым параметром приходит имя файла. Посчитать количество букв английского алфавита, которое есть в этом файле. Вывести на экран число (количество букв). Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (84)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Александр32 уровень
15 сентября, 17:40
английские буквы находятся в диапазоне 65-122 байт.
4 декабря, 08:22
По таблице в интернете 65-90 диапазон прописных букв, 97-122 строчных.
Максим27 уровень
28 августа, 15:00
Люди подскажите, плиз, как перед отправокй на проверку не забывать убирать костыли, типа:
args = new String[]{"e:/temp/file1.txt"};
Какой-то напоминатель надо придумать, а то по нескольку попыток трачу в каждой задаче, где нужно с клавиатуры ввести или передать из командной строки аргументы. За идеи спасибо заранее!
Alexander Sedov26 уровень, Москва
30 августа, 06:40
пиши в конце строки //todo будет подсвечиваться желтым даже =)
Максим27 уровень
30 августа, 14:44
Классно! Пасибо большое! Теперь, хоть вижу что поубирать надо!
Andry Max35 уровень, Минск
9 августа, 02:30
ах блин постоянно забываю закрыть поток, в итоге со второй попытки. решал через паттерн, сделал быстро, но всё равно кажется что заморочился, т.к. ниже сделали просто через сравнение символов, забыл что так можно)
Роман Патрушев20 уровень, Казань
24 августа, 15:53
через какой паттерн?
Veronika24 уровень, Москва
29 ноября, 08:34
https://javarush.ru/groups/posts/1135-reguljarnihe-vihrazhenija-v-java
Екатерина19 уровень, Москва
5 августа, 20:30
прошло FileInputStream inputStream = new FileInputStream(args[0]); byte[] bytes = new byte[inputStream.available()]; int count = inputStream.read(bytes); inputStream.close(); int counter = 0; for (byte a : bytes) { if ((a >= 65 && a <= 90) || (a >= 97 && a <= 122)) { counter++; } } System.out.println(counter);
Андрей37 уровень, Москва
31 июля, 14:55
import java.util.regex.*; public class Solution { public static void main(String[] args) throws IOException { FileInputStream fin = new FileInputStream(args[0]); int count = 0; String result = ""; while (fin.available() > 0) { result += (char) fin.read(); } fin.close(); Pattern pat = Pattern.compile("[a-zA-z]"); Matcher mat = pat.matcher(result); while (mat.find()) { count++; } System.out.println(count); } }
Oleg Shegula19 уровень, Днепр
20 сентября, 11:20
хороший подход в плане Pattern , спасибо за пример
Anastasiia20 уровень
24 сентября, 14:41
да, с рег.выражениями удобнее, правда мне кажется что [a-zA-Z] правильнее, нет?
Anonymous #37410529 уровень, Амстердам
24 ноября, 10:55
Файл в 1Мб создаст миллион неиспользуемых неудаляемых GC объектов String. Да ещё и к диску будет обращаться за каждым байтом.
Ярослав35 уровень
14 июня, 20:48
Сначала заморочился, начал было переводить содержимое файла в массив символов, и потом в двойном цикле проверять на соответствие каждый символ с другим массивом, содержащем английский алфавит. Но потом дошло - можно же считывать по символу и сразу проверять на соответствие. В итоге за 5 минут переписал код и прошел валидацию.
Oleg Solovichenko29 уровень, Екатеринбург
6 июня, 19:24
использовал FileReader он вроде символы читает, а не байты
5 февраля, 19:31
бесит что сделал правильно, все условия выполняются, но валидатор хочет по-другому
public class Solution {
    public static void main(String[] args) throws IOException {
        FileInputStream fileInputStream = new FileInputStream(args[0]);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
        char[] chars = bufferedReader.readLine().toCharArray();
        int count = 0;
        for (int i = 0; i < chars.length; i++) {
            char a = chars[i];
            if((a>='a'&a<='z')||(a>='A'&a<='Z')){
                count++;
            }
        }
        bufferedReader.close();
        fileInputStream.close();
        System.out.println(count);

    }
}
Anton Demchenko26 уровень, Киев
19 февраля, 15:25
Вы используете конструкцию с буфером. Скорее всего он ругается из-за того что ожидает конструкцию типа while (fileInputStream.available()>0) { ... } Тут задачи не всегда ставится для достижения конечного результата, а на закрепление материала пройденного в лекции, из-за чего от вас ожидается решение подобное примерам.
Дмитрий Скоморохов35 уровень, Москва
23 февраля, 20:03
Скорее всего ругается потому, что в этой строке
char[] chars = bufferedReader.readLine().toCharArray();
Вы считываете только первую строчку в файле, а файл может иметь и несколько строк. Тут либо через while лучше либо еще лучше просто считать все байты из файла с помощью метода read в байтовый массив, а потом через фор пройтись по каждому элементу, проверяя условие, как вы уже сделали выше, только используя расширение типов byte до char.
Yurii Koval31 уровень
11 июня, 11:38
Суть в том, что вы считываете только первую строчку в файле, а файл может иметь и несколько строк. Я добавил цикл while (reader.ready()).
Михаил Голубцов39 уровень, Санкт-Петербург
4 февраля, 13:43
if ("abcdefghijklmnopqrstuvwxyz".indexOf(Character.toLowerCase(ch)) > -1) {
    count++;
}
Целиком на Github.
Константин36 уровень, Одесса
25 января, 18:33
Объясните пожалуйста, в строке: FileInputStream inputStream = new FileInputStream(args[0]); args[0]- это что?
Beslan Bavizhev39 уровень
1 февраля, 10:39
В массиве args содержатся параметры(аргументы) запуска программы. Пример с тремя параметрами: Параметры передадутся в args. args[0] = "param1" args[1] = "param2" args[2] = "param3" Дальше программист в коде работает с args. В IDEA имитировать передачу таких параметров можно через соответствующее меню: В примере задан 1 параметр имя читаемого файла (как того требует данная задача). Дальше закидываем этот параметр в FileInputStream и реализуем логику того что нам нужно сделать по условиям задачи:
FileInputStream inputStream = new FileInputStream(args[0]);
...