日期:2014-05-20 浏览次数:21085 次
import java.io.*;
import java.util.*;
import java.util.List;
class QuestionLibrary {
    private static int counter = 1;
    public final int id = counter++;// 给每一道question一个唯一的id
    private String question;
    private List<String> choices;// 每一个问题里都对应有若干个choice,那么把这些choice也存起来吧;
    private String answer;
    QuestionLibrary(String question, List<String> choices, String answer) {
    super();
    this.question = question;
    this.choices = choices;
    this.answer = answer;
    }
    public String getQuestion() {// 你是用private来修饰question的,那么别的类就只能通过此方法来获取question了
    return question;
    }
    public void setQuestion(String question) {
    this.question = question;
    }
    public List<String> getChoices() {
    return choices;
    }
    public void setChoices(List<String> choices) {
    this.choices = choices;
    }
    public String getAnswer() {
    return answer;
    }
    public void setAnswer(String answer) {
    this.answer = answer;
    }
}
public class ReadTxtToClass {
     List<QuestionLibrary> list = new ArrayList<QuestionLibrary>();// 保存所有question
     BufferedReader br = null;
     String line = null;
     StringBuffer question = null;
     List<String> choice = null;
     StringBuffer answer = null;
     public void fileToLibrary() throws Exception {
    list = new ArrayList<QuestionLibrary>();
    br = new BufferedReader(new FileReader("test.txt"));
    question = new StringBuffer();
    choice = new ArrayList<String>();
    answer = new StringBuffer();
    while ((line = br.readLine()) != null) {//消除文件开头的空行,直到<question>
       while(line.trim().equals("<question>")) {//将文件指针移到题目开头,//从<question>下一行开始处理,在下一个<question>或者文件尾结束处理
        while (!(line = br.readLine().trim()).equals("<choice>"))
            //读取<choice>前的信息
            question.append(line + "\n");
        while (!(line = br.readLine().trim()).equals("<answer>"))
            //读取<answer>前的信息
            choice.add(new String(line));
        //每一个替有多个选项,每个question的每一个选项之间必须有明显的界限,但文件中没有给出(某些选项是以“.”号结束,但有些没有)
        //这里我假定每一行就是一个选项
        while ((line = br.readLine()) != null) {
            if (!(line = line.trim()).equals("<question>"))// 如果还未到文件尾,读取下一个<question>前的信息
            answer.append(line + "\n");
            else break;
        }
        QuestionLibrary q = new QuestionLibrary(new String(question),
            new ArrayList(choice), new String(answer));
        list.add(q);
        
        question.delete(0, question.length());//把里面的内容清空,以便存放下一道题
        choice.removeAll(choice);
        answer.delete(0, answer.length());        
        if(line == null) break;//如果已经到了文件尾
        }
       if(line == null) break;//如果已经到了文件尾
    }
    }
    public static void main(String args[]) throws Exception {
    ReadTxtToClass rttc = new ReadTxtToClass();
    rttc.fileToLibrary();//将文件信息转换为试题库    
    List list = rttc.list;//准备查看表中的信息
    for(int i=0; i< list.size(); i++) {
        System.out.println("---------问题" + (i+1)+"\n" +((QuestionLibrary)list.get(i)).getQuestion());
        System.out.println("---------问题" + (i+1)+"的选项");        
        for(String temp : ((QuestionLibrary)list.get(i)).getChoices())
        System.out.println(temp);
        System.out.println("---------问题" + (i+1)+"的答案\n" +((QuestionLibrary)list.get(i)).getAnswer());    
    }
    }
}
/*output:
 
---------问题1
Analyze the following code:
public class Test {
private int t;
public static void main(String[] args) {
int x;
System.out.println(t);
}
}
---------问题1的选项
The variable t is not initialized and therefore causes errors
The variable t is private and therefore cannot be accessed in the main method
t is non-static and it cannot be referenced in a static context in the main method.
The variable x is not initialized and therefore causes errors.
The program compiles and runs fine.
---------问题1的答案
3
---------问题2
What is Java (in regard to Computer Science) ?
---------问题2的选项
A type of coffee
An object-oriented programming language
An interactive website
none of above
---------问题2的答案
2
---------问题3
Java runs on _______.
---------问题3的选项
Windows
Unix/Linux
Mac
All of the Above
---------问题3的答案
4
---------问题4
What is the main function of any variable ?
---------问题4的选项
To add numbers together
To keep track of data in the memory of the computer
To print words on the screen
To write Java
---------问题4的答案
2
---------问题5
The following statements make length be what number ?
int length;
length = 4;
length ++;
---------问题5的选项
4
5
6
8
---------问题5的答案
5
 
 
 */