我需要将每个输入的行存储到同一个数组中

时间:2015-10-04 22:05:52

标签: java arrays string

我需要将多行输入存储到同一个数组中。循环必须继续将每个新行存储到数组中,直到输入sentinel值为止。到目前为止,我有这段代码:

     while(!students.equals("zzzz") && !students.equals("ZZZZ")){
        students = br.readLine();
        studentInfo = students.split("\\n");

        }
        System.out.println (studentInfo[0]);

当我输入sentinel值(ZZZZ或zzzz)时,所有这些都会打印出zzzz,因为它将sentinel值存储到第一个数组位置。我错过了什么?我希望能够键入任意数量的行,并访问这些行中的每一行并通过调用它来操作该字符串(studentInfo [5]或studentInfo [55])。请帮忙

2 个答案:

答案 0 :(得分:0)

根据定义,br.readLine()不会返回任何带换行符的内容,因此代码为:

students = br.readLine();
studentInfo = students.split("\\n");

将始终导致studentInfo为大小为1的数组,其第一个(也是唯一的)元素是students中的任何内容。

此外,您每次循环替换 studentInfo,因此它始终输入 last 行,逻辑上必须是"zzzz"或{ {1}}。

要解决此问题,您应该使用"ZZZZ",它可以自动增大(基本上您应该避免使用数组)。

试试这个:

List

List<String> studentInfo = new LinkedList<>(); String student = ""; while (!student.equalsIgnoreCase("zzzz")) { student = br.readLine(); if (!student.equalsIgnoreCase("zzzz")) studentInfo.add(student); } System.out.println (studentInfo); 循环有点笨拙,因为while变量必须在循环外声明(即使它只需 in 循环)并且条件必须重复(否则您的数据将包含终止信号值)。

它可以更好地表达为student循环:

for

还请注意使用for (String student = br.readLine(); !student.equalsIgnoreCase("zzzz"); student = br.readLine()) studentInfo.add(student); 进行字符串比较。

答案 1 :(得分:0)

我对您的代码进行了细微更改,并添加了有关如何执行此操作的注释:

List<String> studentInfo = new ArrayList<>(); //use arraylist since you don't know how many students you are expecting
//read the first line
String line = ""; //add line reading logic e.g. br.readLine();
while(!line.equalsIgnoreCase("zzzz")){ //check for your sentinel value
    line = br.readLine(); //read other lines
    //you can add an if statment to avoid adding zzzz to the list
    studentInfo.add(students);
}
System.out.println("Total students in list is: " + studentInfo.size());

System.out.println (studentInfo); //print all students in list
System.out.println (studentInfo.get(29)); //print student 30