在Java中计算字符串中单词的出现次数
我从用户那里读到一个单词(查询) 我显示该单词在给定文本文件的每行中出现的次数 示例文本文件: 猫 猫狗猫 猫 如果我在猫身上搜索。。我得到的结果是1、2和3。。3.我错了 有没有人帮我修一下柜台在Java中计算字符串中单词的出现次数,java,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
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;
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args)引发FileNotFoundException{
System.out.println(“搜索:”);
字符串查询=ToRead();
int计数器=0;
int lineNumber=0;
int k=0;
System.out.println(“搜索“+”+查询);
File File=新文件(“C:/Users/IBM_ADMIN/Desktop/test.txt”);
扫描仪=新扫描仪(文件);
//列表=新的ArrayList();
while(scanner.hasNextLine())
{
计数器=0;
字符串行=scanner.nextLine();
System.out.println(“行”+行号+”:“+行);
int result=line.indexOf(查询);
而(结果!=-1)
{
结果=line.indexOf(line,result+1);
计数器++;
}
系统输出打印项次(计数器);
//System.out.println(“字符串出现“+计数器+”次”);
lineNumber++;
}
}
公共静态字符串ToRead()
{
字符串s;
扫描仪输入=新扫描仪(系统输入);
s=in.nextLine();
返回s;
}
}如果在打印出答案后立即重置计数器会怎么样?所以在你的打印行下面,把计数器设为零。这将确保您更改或重置它。希望它有帮助,但我目前没有办法测试它。如果
结果
不是-1,您应该只增加计数器
在
while
循环中,您将再次递增它,即使结果
为-1。您可以使用StringUtils.countMatches
,如下所示:
count += StringUtils.countMatches(line, query);
如果你想打印出每行的数字,那么
count = StringUtils.countMatches(line, query);
我不完全理解你的问题。如果要逐行打印所有引用,则应使用第二个。否则,应使用第一个循环,但在循环外部使用
println
。首先,将内部循环更改为
int result = line.indexOf(query);
while(result !=-1)
{
counter++;
result = line.indexOf(query,result+1);
}
System.out.println(counter);
其次,您能给出程序的当前输出和预期输出吗?计算字符串出现次数的另一种方法是使用
split
method()
如果结果是-1,他在哪里增加计数器?在这里:
result=line.indexOf(line,result+1);计数器++代码>我知道您只是在学习Java,但是:请花点时间阅读Java源代码的Java编码指南。将类命名为“main”是非常错误的。我甚至会更进一步:在学习如何编程的同时,还要学习如何编写好的程序;例如,通过仔细研究@Buuman实际输出搜索cat行0:cat 1行1:cat dog cat 1行2:dog 1预期输出搜索cat行0:cat 1行1:cat dog cat 2行2:dog 0这里您是说您的第三行(行2)读作“dog”,而在您的问题中,您说它读作“cat”。你能用这些实际和预期的结果更新你的问题吗?这将有助于澄清您的问题:-)此外,请使用我的答案中的循环重新运行您的程序(因为您至少有一个错误,您在搜索字符串变量行
以查找变量行
中包含的字符串),然后使用新代码和新输出更新您的答案。现在它说了什么?这是搜索字符串的结果是什么。split(“cat”).length代码>?;-)谢谢,我的回答有错。您现在可以看到我的答案的编辑版本。这次答案是正确的。尽管如此,我还是不推荐这种做法,它感觉太像黑客了。
int numberOfOccurrences = split("find me", -1).length - 1;