我需要将多行输入存储到同一个数组中。循环必须继续将每个新行存储到数组中,直到输入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])。请帮忙
答案 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