Java 我的代码中的错误导致行计数错误。请告知
共有4行,但程序仅检测到1行。 我的代码可能有什么问题 输入文件的内容: 生存还是毁灭:这是个问题 受苦是否更高尚 凶残命运的投石器和箭 或是拿起武器对抗麻烦的海洋 我的代码: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
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会处理它吗?我想是第一台扫描仪。第二,你应该经常进行良好的资源管理。这样,以后当程序变得更复杂时,这是第二天性,你不会忘记。实际上,我在编写代码时非常小心这些东西,非常对称,但既然你提到了它,这只是一个例子,我就把重点放在问题的主要部分。这很好,为什么我会投票给答案。但是,由于您正在重用该变量,因此应该确保首先清除旧值。