Подсчет символов в текстовом файле и печать в текстовый файл

Я хочу подсчитать количество каждого буквенного символа в этом текстовом файле, если только строка не начинается с «>», и в этом случае она просто запишет эту строку в файл. Это то, что у меня есть, и оно не будет компилироваться, потому что оно говорит «error: cannot find symbol» и указывает на точку в моем операторе for line.length.

Почему это не работает??

String line;
while ((line = br.readLine () ) != null)
{
    if (line.startsWith( ">" ))
    {
        line += "\t";
        bw.write (line);
    }
    else
    { 
            int aCounter=0;
            int bCounter=0;
            int cCounter=0;
        for (int m=0; m < line.length; m++)
        {
            char letter = line.charAt(m);


            switch (letter)
            {
                case 'A':
                    aCounter++;
                    break;
                case 'B':
                    bCounter++;
                    break;
                case 'C':
                    cCounter++;
                    break;
            }
            }    
        bw.write( "A:" + aCounter + " B:" + bCounter + " C:" + cCounter);

}

файл для чтения образец:

это программа, которая будет считать символы abcdabcdababab

желаемый вывод программы:

это программа, которая будет считать символы a:5 b:5 c:2 d:2


person Devon Peterson    schedule 02.12.2014    source источник
comment
line.length() должен решить вашу проблему. Кроме того, в качестве хорошей практики JAVA вы можете использовать hashmap для отслеживания количества каждого символа. Чтобы определить, является ли ваш char буквенным символом, вы можете использовать Character.isLetter(string.charAt(m)). Обратитесь к этой записи для более подробной информации: stackoverflow.com/questions/4047808/   -  person Ensar Hatipoglu    schedule 02.12.2014
comment
Выполнение приведенной выше идеи Hashmap также является простым способом избежать создания 26 различных переменных. Создание такого количества переменных — плохая идея, как с точки зрения кодирования (больше переменных — больше шансов запутаться), так и с точки зрения лени (много ввода или большого количества копий/вставок/изменений, что создает больше ошибок в коде).   -  person Xynariz    schedule 03.12.2014
comment
Спасибо за помощь! Теперь он работает и компилируется без проблем, но количество каждой буквы печатается неправильно. Он печатается так: A:0 B:0 A:0 A:0 B:1 A:0 B:0   -  person Devon Peterson    schedule 03.12.2014


Ответы (2)


Это должно быть line.length() с параметрами, обозначающими метод:

for (int m=0; m < line.length(); m++ )
person M A    schedule 02.12.2014
comment
Я добавил это, и теперь он работает, но неправильно печатает счетчик. Выглядит это так: A:0 B:1 A:0 C:1 B:0 B:0 A:1 - person Devon Peterson; 03.12.2014

Вы должны быть перепутаны со свойством length массива и методом length() строки. К методам нужно обращаться с помощью () (круглые скобки), а к свойствам можно обращаться только по именам.

ОБНОВЛЕНИЕ: вам необходимо инициализировать счетчики над циклом for. Они сбрасываются до 0 на каждой итерации цикла.

int Acounter=0; int Bcounter=0; int Ccounter=0;

они должны быть выше цикла for. Другое предложение состоит в том, что переменные java должны начинаться с буквы нижнего регистра (а классы должны начинаться с буквы верхнего регистра). Пример: ACounter должно быть aCounter.

person RP-    schedule 02.12.2014
comment
отличное предложение! Теперь он компилируется и запускается, но неправильно печатает количество каждой буквы. Это что-то вроде А:0 А:0 Б:1 А:0 А:0 А:0 С:1 - person Devon Peterson; 03.12.2014
comment
У меня уже были инициализированы эти переменные, и я изменил все переменные на нижний регистр, как вы предложили. Хороший звонок. У меня почему-то тот же ответ. Большое спасибо за помощь. У меня столько проблем с такой простой программой. - person Devon Peterson; 03.12.2014
comment
@DevonPeterson На самом деле вам нужно вывести bw.write() из цикла for. Это должно быть сразу после цикла for. Это похоже на это. Вы инициализировали счетчик равным 0 и читаете строку, повторяете строку char и продолжаете обновлять счетчик, и после того, как вы закончили со строкой (для цикла), вам нужно распечатать счетчик. - person RP-; 03.12.2014
comment
Хорошо, я так и сделал, и теперь он подсчитывает правильное количество символов, но перечисляет их несколько раз, например: a: 3 b: 2 a: 2 a: 1 b: 1, и должно быть так: a: 6 b: 3 - person Devon Peterson; 03.12.2014
comment
Вы хотите, чтобы он учитывался для каждой строки отдельно или для всех строк вместе? Если это так, вам нужно инициализировать счетчики перед циклом while и распечатать их через некоторое время. - person RP-; 03.12.2014
comment
Извините, я уже сделал это, но я забыл отредактировать это выше. Он официально отредактирован так же, как и в моей программе. - person Devon Peterson; 03.12.2014