Java 我的代码中的错误导致行计数错误。请告知

Java 我的代码中的错误导致行计数错误。请告知,java,Java,共有4行,但程序仅检测到1行。 我的代码可能有什么问题 输入文件的内容: 生存还是毁灭:这是个问题 受苦是否更高尚 凶残命运的投石器和箭 或是拿起武器对抗麻烦的海洋 我的代码: import java.io.*; import java.util.*; public class wordcount{ public static void main(String[] args) throws FileNotFoundException { Scanner console = new S

共有4行,但程序仅检测到1行。 我的代码可能有什么问题

输入文件的内容:

生存还是毁灭:这是个问题

受苦是否更高尚

凶残命运的投石器和箭

或是拿起武器对抗麻烦的海洋

我的代码:

import java.io.*;
import java.util.*;

public class wordcount{
  public static void main(String[] args) throws FileNotFoundException {

  Scanner console = new Scanner(System.in);
  System.out.print("What is the name of the file? ");

  String file = console.nextLine();

  Scanner input = new Scanner(new File(file));

  int wordCount = 0;
  while(input.hasNext()){
     String word = input.next();
     wordCount++;
  }

  int lineCount = 0;
  while(input.hasNextLine()){
     String line = input.nextLine();
     lineCount++;
  }   

  System.out.println("total words = " + wordCount);
  System.out.println("total lines = " + lineCount);

  }

}

您的第一个
,而
循环正在消耗整个文件,然后除了最后的换行符外,什么都没有了。相反,将顶级循环设为行计数器,并在每次迭代中拆分空格、标记或扫描行以查找字数:

while(input.hasNextLine()) {
    String line = input.nextLine();
    lineCount++;
    wordCount += line.split("\\s+").length;
}
在两个
for循环之间添加此行:

input = new Scanner(new File(file));  /* get a new scanner to start over */

扫描仪从头到尾读取,耗尽输入。我看不到将扫描仪指针重置为文件开头的方法(
scanner.reset()
不执行此操作)

你写的诗很好。你确定你的程序得到了正确的文件吗?是的,它得到了正确的文件。单词计数对我有用。但由于某种原因,行数给了我1,而不是4。您的行已经被first while循环占用。@Toddswell:据我所知,William不是该网站的参与者。我得到以下错误:“wordcount.java:19:error:非法转义字符”wordcount+=input.split(“\s+”)。长度@Kizzo应该是
拆分(“\\s+”)
(两个反斜杠)。注意:此代码当前的状态将把一个空行计算为一个单词。如果(!line.trim().isEmpty())
收到另一条错误消息……wordCount.java:19:error:找不到符号wordCount+=input.split(\\s+)。length;^可以通过将
wordCount
行包装为
来修复此问题symbol:methodsplit(String)location:ScannerI类型的变量输入刚刚编译并测试了它目前的状态。很好。很好的方法。别忘了调用
input.close()
gc会处理它吗?我想是第一台扫描仪。第二,你应该经常进行良好的资源管理。这样,以后当程序变得更复杂时,这是第二天性,你不会忘记。实际上,我在编写代码时非常小心这些东西,非常对称,但既然你提到了它,这只是一个例子,我就把重点放在问题的主要部分。这很好,为什么我会投票给答案。但是,由于您正在重用该变量,因此应该确保首先清除旧值。