我试图计算某个字符串出现在文本文件(.txt)中的次数,到目前为止,我让FileReader工作(它读取文件,我可以输出文本该文件到控制台)。我想知道的是检查文本文件中是否存在字符串(由用户输入)。到目前为止我所拥有的是:
import java.io.*;
import java.util.Scanner;
public class Assignment2 {
String fileName = "test.txt";
String line = null;
int counter = 0;
public String getUserInput() {
String userInput;
Scanner userInputScanner = new Scanner(System.in);
userInput = userInputScanner.nextLine();
return userInput;
}
public String returnUserInput() {
String userInput = getUserInput();
return userInput;
}
public void readFile() {
try {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null) {
while (line.indexOf(word, indexOfWord) != -1) {
indexOfWord += word.length();
counter += 1;
}
}
bufferedReader.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
Assignment2 test = new Assignment2();
test.readFile();
}
}
发生的事情是我无法遍历文件,当我使用for循环运行程序时,它会卡住(?),它只是保持运行而没有错误,但它什么也没做。< / p>
我知道我的问题是for循环(line.length()不会起作用,因为缓冲的读者一次读取一行...我真正想要的是获取字符串的数量在文件中)。我也无法检查用户输入(我想忽略这些字母的情况,但我不能用.contains()做到这一点,我想不出另一种方法来检查该行是否包含用户输入)。
另外,我的过程是否正确,或者我这样做的方式效率不高?我必须检查一个3000字的文件。
答案 0 :(得分:1)
你的节目没有&#34;卡住了#34;,它等着你进入&#34;用户输入&#34; (再次)。
你一直在循环中调用returnUserInput()
,并调用getUserInput()
,它将等待你键入(另一个)字符串并按Enter键。
至于您的代码,请勿将line
声明为字段。它应该是一个局部变量。
要重复搜索一行中的文字,请不要使用contains()
或该行的每个字符的循环。使用indexOf(String str, int fromIndex)
。
<强>更新强>
代码应该是这样的:
String word = returnUserInput();
this.counter = 0;
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
for (String line; (line = reader.readLine()) != null; ) {
for (int i = 0; (i = line.indexOf(word, i)) != -1; i += word.length()) {
this.counter++;
}
}
}
答案 1 :(得分:0)
如果要忽略大小写,请使用以下方法:
line.toLowerCase().contains(text.toLowerCase())
行是您从文件中读取的行。
text是用户输入的字符串,这是您要查找的内容。
定义计数器变量以跟踪数字。
然后检查是否找到匹配项,如果是,则增加计数器。 我可以给你确切的代码,但是你不会学习。如果你遇到困难但这不起作用,我可以帮助你。