【问题标题】:Reading a list of strings from command line in Java从Java中的命令行读取字符串列表
【发布时间】:2016-11-08 14:10:20
【问题描述】:

我正在尝试从 Java 命令行中读取字符串列表,然后打印字符串。 这是代码: -

public class Example {
  public static void main(String args[] ) throws Exception {
    List<String> list = new ArrayList<String>();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    while((line = br.readLine()) != null) {
      list.add(line);
    }
    System.out.println(list);
   }
}

但是它进入了一个无限循环并且从不打印列表。 谁能帮我指出我的代码中的错误?

【问题讨论】:

  • 你的while 循环说'如果你不输入 null 那么它将永远持续下去'。因此,您需要在输入完字符串后从控制台输入 null。你可以通过 ctrl+D 来做到这一点

标签: java command-line-arguments system.in


【解决方案1】:

检查 while 循环内的终止条件将解决您的问题。

public class Example {
    public static void main(String args[] ) throws Exception {
        List<String> list = new ArrayList<String>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while(true) {
            line = br.readLine();
            if (line == null || line.isEmpty()) {
                break;
            }
            list.add(line);
        }
        System.out.println(list);
    }
}

【讨论】:

  • 有一个错误。当代码到达 EOF 时,BufferedReader.readLine() 会返回什么?
【解决方案2】:

您的代码没有任何问题。它不会仅仅因为还没有得到正确的“信号”而终止。

输入完成后尝试Ctrl+D。它应该适用于大多数情况。

Ctrl+Z 用于 windows 命令行。

如果您使用的是 Java 8。有一个更短的版本

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.stream.Collectors;

public class ReadLinesFromStdin {

    public static void main(String [] args) throws IOException {
        List<String> lines = new BufferedReader(new InputStreamReader(System.in))
                .lines().collect(Collectors.toList());
        System.out.println(lines);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多