如何在java中搜索文本文件中的句子

时间:2014-03-17 18:26:11

标签: java regex

您好我试图制作一个简单的搜索应用程序,在文本文件中对一个或多个单词(多于一个单词,两个单词或更多单词)进行罚款,然后在文本中返回此单词或多个单词的出现次数档案

我的测试文本文件是:

hi 
hi 
hi
hello 
what is this from her what is this
i'm new 
i'm new 

我的搜索功能是:

public int search(String text,String filePath) throws IOException
{
    int count = 0;
    String line;
    FileReader fr = new FileReader(filePath);
    BufferedReader br = new BufferedReader(fr); 
           while((line = br.readLine()) != null)
             {

                if(line.toLowerCase().contains(text))
                {
                    count++;
                }

        }

    return count;
}

所以我的问题是在测试文本文件中我可以从句子中找到句子(这是什么)(这是什么,这是从她这是什么)一次,并且有两个句子(这是什么)中(什么是她的句子。

我理解代码

if(line.toLowerCase().contains(text))
                {
                    count++;
                }

在第一次出现(这是什么)句子时它返回true并继续执行并且从不检查同一行中相同句子的另一次出现并且只返回1而不是2这样请帮助我尝试每一件事

2 个答案:

答案 0 :(得分:1)

尝试使用此代码使其更快。

public int search(String text, String filePath) throws IOException {
    int count = 0;
    String line;
    text = text.toLowerCase();
    FileReader fr = new FileReader(filePath);
    BufferedReader br = new BufferedReader(fr);
    while ((line = br.readLine()) != null) {
        int fromIndex = 0;
        int index = -1;
        while ((index = line.toLowerCase().indexOf(text, fromIndex)) != -1) {
            count++;
            fromIndex = index + text.length();
        }

    }

    fr.close();
    br.close();

    return count;
}

答案 1 :(得分:0)

对于单线测试:

public int search(String text,String filePath) throws IOException
{
    int count = 0;
    String line;
    FileReader fr = new FileReader(filePath);
    BufferedReader br = new BufferedReader(fr); 
    while((line = br.readLine().toLowerCase()) != null)
    {
        for (; line.contains(text); line = line.replaceFirst(text, ""), count++);
    }
    return count;
}