Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中计算字符串中单词的出现次数_Java - Fatal编程技术网

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

在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

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

示例文本文件:

猫狗猫

如果我在猫身上搜索。。我得到的结果是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;
}   
导入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;