首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用scanner Scanner统计字数和行数(Java)

使用scanner Scanner统计字数和行数(Java)
EN

Stack Overflow用户
提问于 2018-10-21 00:14:55
回答 1查看 1.3K关注 0票数 0

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

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

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

代码语言:javascript
复制
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循环永远不会结束,所以它永远不会打印总单词数,并且在我编写代码时也不会继续执行下面的代码。

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

提前感谢!

祝你今天愉快!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-21 03:26:03

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

代码语言:javascript
复制
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

正文为%1行

正文有8个单词

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52907635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档