计算字符串出现在文件中的次数

时间:2016-01-21 23:57:50

标签: java search filereader java-io

我试图计算某个字符串出现在文本文件(.txt)中的次数,到目前为止,我让FileReader工作(它读取文件,我可以输出文本该文件到控制台)。我想知道的是检查文本文件中是否存在字符串(由用户输入)。到目前为止我所拥有的是:

import java.io.*;
import java.util.Scanner;

public class Assignment2 {

    String fileName = "test.txt";
    String line = null;
    int counter = 0;

    public String getUserInput() {
        String userInput;
        Scanner userInputScanner = new Scanner(System.in);
        userInput = userInputScanner.nextLine();
        return userInput;
    }

    public String returnUserInput() {
        String userInput = getUserInput();
        return userInput;
    }


    public void readFile() {        
        try {

            FileReader fileReader = new FileReader(fileName);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            while((line = bufferedReader.readLine()) != null) {
                while (line.indexOf(word, indexOfWord) != -1) {
                    indexOfWord += word.length();
                    counter += 1;
                }
            }
            bufferedReader.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Assignment2 test = new Assignment2();
        test.readFile();
    }

}

发生的事情是我无法遍历文件,当我使用for循环运行程序时,它会卡住(?),它只是保持运行而没有错误,但它什么也没做。< / p>

我知道我的问题是for循环(line.length()不会起作用,因为缓冲的读者一次读取一行...我真正想要的是获取字符串的数量在文件中)。我也无法检查用户输入(我想忽略这些字母的情况,但我不能用.contains()做到这一点,我想不出另一种方法来检查该行是否包含用户输入)。

另外,我的过程是否正确,或者我这样做的方式效率不高?我必须检查一个3000字的文件。

2 个答案:

答案 0 :(得分:1)

你的节目没有&#34;卡住了#34;,它等着你进入&#34;用户输入&#34; (再次)。

你一直在循环中调用returnUserInput(),并调用getUserInput(),它将等待你键入(另一个)字符串并按Enter键。

至于您的代码,请勿将line声明为字段。它应该是一个局部变量。

要重复搜索一行中的文字,请不要使用contains()或该行的每个字符的循环。使用indexOf(String str, int fromIndex)

<强>更新

代码应该是这样的:

String word = returnUserInput();
this.counter = 0;
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
    for (String line; (line = reader.readLine()) != null; ) {
        for (int i = 0; (i = line.indexOf(word, i)) != -1; i += word.length()) {
            this.counter++;
        }
    }
}

答案 1 :(得分:0)

如果要忽略大小写,请使用以下方法:

line.toLowerCase().contains(text.toLowerCase())

行是您从文件中读取的行。
text是用户输入的字符串,这是您要查找的内容。
定义计数器变量以跟踪数字。

然后检查是否找到匹配项,如果是,则增加计数器。 我可以给你确切的代码,但是你不会学习。如果你遇到困难但这不起作用,我可以帮助你。