使用扫描仪扫描仪(Java)统计字数和行数

时间:2018-10-20 16:14:55

标签: java while-loop java.util.scanner

这是我第一次来到stackoverflow,有时告诉我xD很快就会出现在这里。

我正在尝试做一个非常简单的事情,计算用户使用扫描仪使用的单词数和文本行数(显然是未知的单词和行数),最后打印这两个数字。所有这些都使用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循环永远不会结束,因此它永远不会打印单词的总数,并且在我编写时都不会继续下面的代码。

有人可以帮我解决这个问题吗?

谢谢!

祝你有美好的一天!

1 个答案:

答案 0 :(得分:1)

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

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 保留用户输入的每一行。
  • 相应地将变量重命名为linesword
  • 使用regex拆分每个单词,然后计算长度 并最终将其存储为文字。

用户输入空白行后,程序将终止。

输出:

  

asd asd asd asd asd asd asd asd asd

     

文本有1行

     

文本有8个字