多行输入,每行多输入

时间:2019-08-13 05:37:07

标签: java java-8

我的要求是在多行上接受用户的多次输入。

每行表示输入的含义为:Power Energy Idea Strength,每个输入之间仅用一个空格隔开。

输入:

2 4 5 7
3 4 8 1 
4 2 3 6

输出包含列表:

List<Integer> power = {2,3,4}
List<Integer> energy = {4,4,2}
List<Integer> idea = {5,8,3}
List<Integer> strength = {7,1,6}

首选的解决方案是Java,但如果可以提供Java-8解决方案,我会喜欢的。

我尝试了以下尝试,但是没有运气:

        String input = "";
        Scanner keyboard = new Scanner(System.in);
        String line;
        while (keyboard.hasNextLine()) {
            line = keyboard.nextLine();
            if (line.isEmpty()) {
                break;
            }
            input += line + "\n";
        }
        System.out.println(input);

我能够读取多行输入,但不能将它们另存为List中的单独类别。

2 个答案:

答案 0 :(得分:2)

您可以简单地将行拆分并将值放在单独的列表中

    line = keyboard.nextLine();
    if (line.isEmpty()) {
        break;
    }
    String arr[] = line.split(" ");// spiting the line based on space
    if (arr.length==4) { // check if length is 4 as you are expecting
    // use Integer.valueOf() to convert from string to Integer
        power.add(arr[0]);
        energy.add(arr[1]);
        idea.add(arr[2]);
        strength.add(arr[3]);
    }else {
        //throw exception or break
    }
    input += line + "\n";
}

关于如何在System.in中使用Java 8流API,请检查How to build a Java 8 stream from System.in / System.console()?

答案 1 :(得分:0)

U可以使用此程序输入任意数量的值:

List<Integer> power = new ArrayList<>();
List<Integer> energy = new ArrayList<>();
List<Integer> idea = new ArrayList<>();
List<Integer> strength = new ArrayList<>();

Scanner sc = new Scanner(System.in);
while(true) {
  String s = sc.nextLine();
  if(s.equals("exit")) break;
  String args = s.split(" ");
  if(args.length >= 4) {
    power.add(Integer.valueOf(args[0]));
    energy.add(Integer.valueOf(args[1]));
    idea.add(Integer.valueOf(args[2]));
    strength.add(Integer.valueOf(args[3]));
  }
}