【问题标题】:count and print total number of empty lines from user input in java计算并打印java中用户输入的空行总数
【发布时间】:2020-02-27 08:34:43
【问题描述】:

我编写了一个程序来计算用户输入的行数和单词数。

问题:我需要程序计算行数,即使它们是空的,而下面的代码不计算空行

我尝试过使用 isEmpty() 方法,但它不起作用,我看到了一个名为 isBlank() 的方法,但要使用它,您需要下载一个库.还有其他方法可以计算空行吗?

import java.util.*;
import java.util.ArrayList;


public class Counter2{
  public static void main(String[]args){
    List<String> arrayList = new ArrayList<String>();
    int words = 0;

    Scanner scan = new Scanner(System.in);
    while (scan.hasNext()) {
      String line = scan.nextLine();
      arrayList.add(line);
      words += line.split(" ").length;

    }
    System.out.println("lines: " + arrayList.size());
    System.out.println("words: " + words);
    scan.close();
  }
}

【问题讨论】:

  • “它不起作用”不是很有帮助,你有什么更确切的问题?
  • 那么,这个循环会停止读取输入吗?
  • @Kris 我将在 linux 终端中使用这个程序,它是一个评估,我们允许使用 control + d 停止读取输入,所以没有问题。
  • @JoakimDanielson 问题是,当我的输入是空行时,程序不计算它,我需要程序计算所有行,即使它们是空的。
  • 你确定按ctrl+d没问题,循环后的最后几行什么时候执行?

标签: java line counter


【解决方案1】:

检查您的行是否为空且不为空:

line != null && !"".equals(line.trim())

如果您不想对行和单词做任何事情而只计算它们,为什么不为此使用两个计数变量呢?

while (scan.hasNext()) {
      String line = scan.nextLine();
      if(line != null && !"".equals(line.trim())) { 
        lineCount++;
        wordCount += line.split(" ").length;
      }
 }

 System.out.println("Lines:" + lineCount);
 System.out.println("Words:" + wordCount);

}

【讨论】:

  • OP 也想计算空行,而您正在做相反的事情。使用 isEmpty 有什么问题?
  • @Tran Ho 我只想计算行数和单词数,这段代码可以,但是当输入为空行时它不会计算它,我需要程序来计算行数,即使它们是空的.
【解决方案2】:

使用System.in.read 代替Scanner.hasNext() 从终端获取所有输入。 \n 字符在所有平台上都有效,表示换行。

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Counter2 {

    public static void main(String[]args) throws IOException {
        List<String> arrayList = new ArrayList<String>();
        int words = 0;

        StringBuilder line = new StringBuilder();
        int n ;
        while ((n = System.in.read()) != -1) {
            if (n=='\n') {
                arrayList.add(line.toString());
                if (!line.toString().isEmpty()) {
                    words += line.toString().split(" ").length;
                }
                line = new StringBuilder();
            } else {
                line.append((char) n);
            }
        }
        System.out.println("lines: " + arrayList.size());
        System.out.println("words: " + words);
    }

}

上面的sn-p不把换行算作单词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2015-12-28
    相关资源
    最近更新 更多