在Java中计算字符串中单词的出现次数

时间:2015-06-29 13:05:35

标签: java

我从用户那里读了一个字(查询) 我在给定文本文件的每一行中显示该单词的出现次数

示例文本文件:

  

     猫猫猫

     

如果我在猫上搜索..我得到的是1,2和3 .. 3是错误的..

所以任何修复计数器的帮助??

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class main {


public static void main(String[] args) throws FileNotFoundException  {


    System.out.println("Search: ");
    String query = ToRead();
    int counter =0;
    int lineNumber=0;
    int k=0;

    System.out.println("Searching for"+ " " + query);

    File file = new File("C:/Users/IBM_ADMIN/Desktop/test.txt");
    Scanner scanner=new Scanner(file);
    //List<String> list=new ArrayList<>();

    while(scanner.hasNextLine())
    {
        counter=0;

        String line = scanner.nextLine();

        System.out.println("line " + lineNumber + " :" + line);

        int result = line.indexOf(query); 
        while(result !=-1) 
        { 
            result = line.indexOf(line,result+1); 
            counter++; 
        } 
        System.out.println(counter);

        //System.out.println("The string occurred "+counter+" times");           

        lineNumber++;           
    }   
}

public static String ToRead()
{
    String s;
    Scanner in = new Scanner(System.in);
    s = in.nextLine();
    return s;
}   

}

5 个答案:

答案 0 :(得分:2)

计算字符串出现次数的另一种方法是使用split方法(http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29):

int numberOfOccurrences = split("find me", -1).length - 1;

答案 1 :(得分:0)

如果您在打印答案后立即重置计数器怎么办?因此,在您的打印行下,只需将计数器设置为零。这将确保您更改或重置它。希望它有所帮助,但我现在无法测试它。

答案 2 :(得分:0)

您可以使用StringUtils.countMatches,如下所示:

count += StringUtils.countMatches(line, query);

如果要打印每行中的数字,那么

count = StringUtils.countMatches(line, query);

我完全不明白你的问题。如果要逐行打印出所有出现的内容,则应使用第二种情况。否则,应使用第一个,但在循环外使用println

答案 3 :(得分:0)

首先,将内循环更改为

int result = line.indexOf(query); 
while(result !=-1) 
{ 
     counter++;
     result = line.indexOf(query,result+1); 
} 
System.out.println(counter);

其次,您能给出程序的当前输出和预期输出吗?

答案 4 :(得分:-1)

如果counter不是-1,则只应增加result

while循环中,即使result为-1,您也会再次递增它。