使用扫描器(Java)计算字数和行数

使用扫描器(Java)计算字数和行数,java,while-loop,java.util.scanner,Java,While Loop,Java.util.scanner,这是我第一次来到stackoverflow,有时我会告诉我,我很快就会来这里很多次 我试着做一件非常简单的事情,计算用户通过扫描仪给出的文本的字数和行数,显然字数和行数未知,最后打印这两个数字。所有这些都是使用Java实现的 现在,我已经尝试了几天来做单词计数部分,因为这样做之后,它将非常类似于代码行部分。我尝试了很多使用数组、拆分方法等的方法。现在我有了以下代码: import java.util.Locale; import java.util.Scanner; import java.ut

这是我第一次来到stackoverflow,有时我会告诉我,我很快就会来这里很多次

我试着做一件非常简单的事情,计算用户通过扫描仪给出的文本的字数和行数,显然字数和行数未知,最后打印这两个数字。所有这些都是使用Java实现的

现在,我已经尝试了几天来做单词计数部分,因为这样做之后,它将非常类似于代码行部分。我尝试了很多使用数组、拆分方法等的方法。现在我有了以下代码:

import java.util.Locale;
import java.util.Scanner;
import java.util.regex.Pattern;

public class WordCount {
     public static void main(String[] args) {

         int i=0;

         Scanner input = new Scanner(System.in).useLocale(Locale.US);

         while(input.hasNextLine()) {
            i++;
            input.next();
            }

         System.out.printf("%30s\n", "The text has " + i + " words");
     }
}
但是,这可以正确计算文本中的单词数,因为while循环永远不会结束,它永远不会打印单词总数,并且在编写代码时也不会继续执行以下代码

有人能帮我解决这个问题吗

提前谢谢


祝你有愉快的一天

我会将您的代码调整为以下内容:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in).useLocale(Locale.US);

    int lines = 0;
    int words = 0;

    String currLine = "?"; 
    while (currLine != null && currLine.trim().length() > 0) {
        currLine = input.nextLine();
        words = words + currLine.split("\\W+").length;
        lines++;
    }

    System.out.printf("%30s\n", "The text has " + (lines - 1) + " lines");
    System.out.printf("%30s\n", "The text has " + (words - 1) + " words");
    input.close();    
}
我们需要使用一个变量来保存输入,所以我使用了currLine 保留用户输入的每一行。 相应地将变量重命名为lines和word。 使用正则表达式拆分每个单词,然后计算长度 并最终将其存储为单词。 一旦用户输入一个空行,程序就会终止

输出:

asd asd asd asd asd asd asd asd asd asd asd

文本有1行

课文有8个单词


您可以使用control-D关闭Unix上的输入流。我忘了它在Windows上是什么。我想是Control-Z。你希望它什么时候结束?我希望它在输入文本后返回答案。该代码用于大学任务,将由自动法官更正,因此需要此代码。非常感谢您的帮助!代码工作得很好!这并没有解决我的问题,因为代码将由虚拟法官更正是一项大学任务,我需要代码在输入文本后返回答案。不过,你的回答对我帮助很大,所以谢谢你抽出时间来!: