Подсчитайте, сколько раз строка появляется в файле

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

Вот как выглядит мой файл, это .txt:

    Test
    Test
    Test
    Test

Я хочу, чтобы метод возвращал, сколько раз он находится в файле. Любая идея о том, как я могу это сделать? В основном мне нужна помощь с первой частью. Поэтому, если бы я искал строку «Тест», я бы хотел, чтобы она возвращала 4.

Заранее спасибо! Надеюсь, я дал достаточно информации!


person Zomby    schedule 16.06.2012    source источник
comment
Что вы сделали до сих пор? это похоже на домашнее задание   -  person Óscar López    schedule 16.06.2012
comment
Все, что я сделал, это заставил мою программу принимать строку (имя игрока) и записывать ее в файл каждый раз с новой строки. Это не домашняя работа, это система предупреждений/банов для моей игры   -  person Zomby    schedule 17.06.2012


Ответы (4)


Вот ты где:

public int countStringInFile(String stringToLookFor, String fileName){
  int count = 0;
  try{
    FileInputStream fstream = new FileInputStream(fileName);
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    while ((strLine = br.readLine()) != null)   {
      int startIndex = strLine.indexOf(stringToLookFor);
      while (startIndex != -1) {
        count++;
        startIndex = base.indexOf(stringToLookFor, 
                                  startIndex +stringToLookFor.length());
      }
    }
    in.close();
  }catch (Exception e){//Catch exception if any
    System.err.println("Error: " + e.getMessage());
  }
  return count;
}

Использование: int count = countStringInFile("SomeWordToLookFor", "FileName");

person GETah    schedule 16.06.2012
comment
Ваше предположение о том, что строка встречается только один раз в строке. - person John D; 17.06.2012
comment
Сработало отлично, большое спасибо. Я все еще очень новичок во всех этих файлах. - person Zomby; 17.06.2012
comment
@zomby Рад, что это сработало. Пожалуйста, посмотрите мой обновленный ответ, чтобы подсчитать слова, которые появляются более одного раза в строке. - person GETah; 17.06.2012
comment
Спасибо за код, так получилось, что в каждой строке написано только одно слово, так что все работает нормально. - person Zomby; 17.06.2012
comment
startIndex = base.indexOf(stringToLookFor, startIndex +stringToLookFor.length()); Какая здесь строка base? - person Shiju K Babu; 31.07.2013

Добавьте этот метод в свой класс, передайте ему свой FileInputStream, и он должен вернуть количество слов в файле. Имейте в виду, что это чувствительно к регистру.

public int countWord(String word, FileInputStream fis) {
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
String readLine = "";
int count = 0;
while((readLine = in.readLine()) != null) {
String words = readLine.split(" ");
for(String s : words) {
if(s.equals(word)) count++;
}
return count;
}

Только что написал это сейчас, и это не проверено, так что дайте мне знать, если это работает. Кроме того, убедитесь, что вы понимаете, что я сделал, если это вопрос домашнего задания.

person Austin    schedule 16.06.2012
comment
Строка 6 должна быть исправлена ​​как String[] words = readLine.split(); - person SriniShine; 28.11.2018

Если вы добрались до точки чтения каждого файла в строку, я бы предложил взглянуть на разделение метода String.

Дайте ему строковый код «Тест», и он вернет массив строкового типа — подсчитайте количество элементов в строке. Суммируйте их, чтобы получить общее количество случаев.

import java.io.*;

public class StringCount {
    public static void main(String args[]) throws Exception{

        String testString = "Test";
        String filePath = "Test.txt";
        String strLine;
        int numRead=0;

        try {
            FileInputStream fstream = new FileInputStream(filePath);
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));

            while ((strLine = br.readLine()) != null)   {
                strLine = strLine + " ";
                String [] strArry = strLine.split(testString);

                if (strArry.length > 1) {
                     numRead = numRead + strArry.length - 1;
                }
                else {
                     if (strLine == testString) {
                         numRead++;
                     }
                }
            }

            in.close();

            System.out.println(testString + " was found " + numRead + " times.");

        }catch (Exception e){
        }
    }
}
person John D    schedule 16.06.2012
comment
Это возвращало только 1 каждый раз. Когда Тест был написан 6 раз. Есть идеи, почему? - person Zomby; 17.06.2012
comment
Можете ли вы предоставить свой тестовый файл? Все тесты, которые я провел против него, вернулись правильно, поэтому интересно, какой вариант использования я пропустил. - person John D; 17.06.2012

я бы сделал так:

  1. открыть и прочитать файл построчно,
  2. проверить, как часто в строке встречается заданное слово...
  3. увеличьте глобальный счетчик для этого..

public static void main(String[] args) throws IOException {
    BufferedReader in = new BufferedReader(new FileReader("Test.txt"));
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter the subtring to look for: ");
    String word = sc.next();
    String line = in.readLine();
    int count = 0;
    do {
    count += (line.length() - line.replace(word, "").length()) / word.length();
    line = in.readLine();
    } while (line != null);
    System.out.print("There are " + count + " occurrences of " + word + " in ");
}
person ΦXocę 웃 Пepeúpa ツ    schedule 10.05.2016