我认为问题在于我的文本文件,但我无法理解?请帮助解决这个问题。 提前谢谢..
这是我的测试文件:
/*
##Question##
Which is not a JDK component?
##Ans1##
Java SE libraries
##Ans2##
Java SE libraries2
##Ans3##
Java SE libraries3
##Ans4##
Java SE libraries4
*/
这是我的代码:
public class QuesSheet {
String strQues;
String[] ansQues = new String[4];
public void testRead() {
try {
Scanner scReader = new Scanner(new File("mocTest.txt"));
while (scReader.hasNext()) {
if (scReader.nextLine().equals("##Question##")) {
strQues = scReader.nextLine();
// System.out.println(str);
} else if (scReader.nextLine().equals("##Ans1##")) {
ansQues[0] = scReader.nextLine();
} else if (scReader.nextLine().equals("##Ans2##")) {
ansQues[1] = scReader.nextLine();
} else if (scReader.nextLine().equals("##Ans3##")) {
ansQues[2] = scReader.nextLine();
} else if (scReader.nextLine().equals("##Ans4##")) {
ansQues[3] = scReader.nextLine();
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(QuesSheet.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args) {
QuesSheet qs = new QuesSheet();
qs.testRead();
System.out.println(qs.ansQues[0]);
System.out.println(qs.ansQues[1]);//Why this is not working?? result show s null in both.
System.out.println(qs.ansQues[2]);//and also same to this??
System.out.println(qs.ansQues[3]);
}
}
答案 0 :(得分:1)
好的,我想我知道你的问题是什么。在你的while循环中,你有一个if else部分,你从文本文件中读取一行,并检查它是哪个部分:
while (scReader.hasNext()) {
if (scReader.nextLine().equals("##Question##")) {
strQues = scReader.nextLine();
} else if (scReader.nextLine().equals("##Ans1##")) {
ansQues[0] = scReader.nextLine();
} else if (scReader.nextLine().equals("##Ans2##")) {
ansQues[1] = scReader.nextLine();
...etc
您需要意识到的是,每次调用scReader.nextLine()时,它都会向前移动文件中的读取位置。因此,超过第一个的if语句不会执行。
你需要做的是这样的事情:
while (scReader.hasNext()) {
String line = scReader.nextLine();
if (line.equals("##Question##")) {
strQues = scReader.nextLine();
} else if (line.equals("##Ans1##")) {
ansQues[0] = scReader.nextLine();
} else if (line.equals("##Ans2##")) {
ansQues[1] = scReader.nextLine();
...etc
现在,对于while循环的每次迭代,只会读取标题和下一行。