我正在尝试从外部文件读取信息并在屏幕上打印有关它们的不同统计信息。我能够成功追踪线条和段落的数量,但在试图找到总量的单词时遇到了麻烦。
我注意到当我把第二个while循环放在第一个时,它给了我正确数量的单词,但错误的行和段落,但是当我现在运行它时,它给了我正确的行和段落,但错误的话。
我非常感谢你帮助弄清楚为什么会这样。谢谢!
int x = 0, words = 0, y = 0;
System.out.print("Name of the input file: ");
in = kbd.nextLine().toLowerCase();
System.out.println(" ");
// Set up connection to the input file
Scanner input = new Scanner(new FileReader(in));
// Set up connection to an output file
PrintWriter output = new PrintWriter(new FileOutputStream("datacopy.txt"));
int lineNum = 0;
while (input.hasNextLine()) {
String line;
line = input.nextLine();
if (line.length() == 0) {
x++;
}
output.println(line + "\n");
lineNum++;
}
while (input.hasNext()) {
String line = input.next();
words++;
}
System.out.println("Words: " + words);
System.out.println("Lines: " + lineNum);
System.out.println("Paragraphs " + --x);
System.out.println(" ");
System.out.println("Output file datacopy.txt created.");
答案 0 :(得分:2)
您必须在每个循环中重新初始化input
:
Scanner input = new Scanner(new FileReader(in));
//loop1
input = new Scanner(new FileReader(in));//re-initialize it again
//loop2
因为在第二个循环中,循环不是从头开始,所以它将从第一个循环的结束点开始。
答案 1 :(得分:1)
问题是下面的两个循环都要求input
位于文件的开头:
while (input.hasNextLine()) // count lines
while(input.hasNext()) // count words
尽管可以“倒带”文件并从头开始,但这并不是最佳选择。最好逐行读取文件,并随时计算单词。
使用line
循环中的while (input.hasNextLine())
变量,将其拆分为单个单词,并将其编号添加到运行总计中:
while (input.hasNextLine()) {
String line = input.nextLine();
output.println(line + "\n");
lineNum++;
if(line.length() == 0){
x++;
continue;
}
words += line.split("\\s+").length;
}