Java 在Arraylist中存储用户输入<;字符串>;直到新线

Java 在Arraylist中存储用户输入<;字符串>;直到新线,java,string,arraylist,Java,String,Arraylist,该问题需要为每个属性输入不同的值。例如: 黑白色 水冷热媒 强风弱 我制作了ArrayList of ArrayList of String来存储这样的东西,比如每个属性的值的数量不是固定的。用户输入黑白,在点击新行时,程序必须开始获取下一个属性的值(冷热介质)。属性的数量已经指定。我遵循了一些(几乎相关)在此处回答并编写以下代码: ArrayList<ArrayList<String>> attributes = new ArrayList<ArrayList&l

该问题需要为每个属性输入不同的值。例如:
黑白色
水冷热媒
强风弱
我制作了ArrayList of ArrayList of String来存储这样的东西,比如每个属性的值的数量不是固定的。用户输入黑白,在点击新行时,程序必须开始获取下一个属性的值(冷热介质)。属性的数量已经指定。我遵循了一些(几乎相关)在此处回答并编写以下代码:

ArrayList<ArrayList<String>> attributes = new ArrayList<ArrayList<String>>();
    String input;
    for(i=0; i<num_of_Attributes ;i++)
    { System.out.print(" Enter attribute no." + i+1 + " : ");
     ArrayList<String> list = new ArrayList<String>();
     while(! input.equals("\n"))
    {
        list.add(input);
        input = sc.nextLine(); 
    }
     attributes.add(list);
    }
ArrayList attributes=new ArrayList();
字符串输入;
对于(i=0;i你应该阅读:

具体而言,该部分规定:

此方法返回当前行的其余部分,不包括末尾的任何行分隔符

因此,如果用户输入一个只有行分隔符的空行
\n
,您将读取一个没有此类行分隔符的空行

检查
while(!input.isEmpty())
或者更好地检查
while(!input.trim().isEmpty())


作为一个更一般的规则,你可以调试你的程序(甚至只是打印
输入
),试图找出你正在检查的实际值。

作为一个快速黑客,你可以做一些事情,比如

    for (i = 0; i < num_of_Attributes; i++) {
        input = " ";
        System.out.print(" Enter attribute no." + (i + 1) + " : ");
        ArrayList<String> list = new ArrayList<String>();
        while (!input.isEmpty()) {
            list.add(input);
            input = sc.readLine();
        }
        attributes.add(list);
    }
for(i=0;i

不太好,但它可以工作。请注意字符串concaternation中的计算。在您的代码中,它将打印01、11、21等等。使用括号它可以工作。

因此您不能同时获得所有输入,程序必须等待在第一行之后接收更多输入,对吗?首先,我的程序输出“输入属性1:”我输入“黑白”,但按Enter键后,“输入属性2:永远不会出现。(无论我给出多少单词/换行符。)我可以使用StringTokeniser来完成此操作。这符合我现在的目的。我无法通过比较输入或使用isEmpty()等来找出如何完成此操作。