我从用户那里读了一个字(查询) 我在给定文本文件的每一行中显示该单词的出现次数
示例文本文件:
猫
猫猫猫猫
如果我在猫上搜索..我得到的是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;
}
}
答案 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,您也会再次递增它。