Java 将字符串文件中的MCQ提取到单个问题对象的Arraylist中

Java 将字符串文件中的MCQ提取到单个问题对象的Arraylist中,java,apache-poi,Java,Apache Poi,我有这个docx文件,我正在使用apachepoi解析它 .该文件包含以下问题和多个答案 public class Question { String question; String rightAnswer; ArrayList<String> wrongAnswers; public Question() { super(); wrongAnswers=new ArrayList(); } public String getQuestion() { r

我有这个docx文件,我正在使用apachepoi解析它 .该文件包含以下问题和多个答案

public class Question {

String question;
String rightAnswer;
ArrayList<String> wrongAnswers;
public Question() {
    super();
    wrongAnswers=new ArrayList();
}

public String getQuestion() {
    return question;
}



public void setQuestion(String question) {
    this.question = question;
}



public void setRightAnswer(String rightAnswer) {
    this.rightAnswer=rightAnswer;
}

public void addWrongAnswer(String wrongAnswer) {
    wrongAnswers.add(wrongAnswer);
    Collections.shuffle(wrongAnswers);
}

public String getRightAnswer() {
    return rightAnswer;
}

public String getRandomWrongAnswer() {
    Random random=new Random();
    int index=random.nextInt(3);
    return wrongAnswers.get(index);
}

public ArrayList<String> getWrongAnswers(){
    return wrongAnswers;
}


}
String regex = "[0-9\\(\\)]+\\.\\s(.*?)[0-9\\(\\)]+\\.\\s";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(wholeFileAsString);
    ArrayList<String> allQuestions = new ArrayList<String>();
    while (m.find()) {
        allQuestions.add(m.group(1));
    }
    System.out.println("Total Questions : "+allQuestions.size());
    for (String QuestionString : allQuestions) {
        String regex2 = "\\s[a-zA-Z]\\.\\s";
        String splits[] = QuestionString.split(regex2);
        String questionSt = splits[0];
        String rightAnswer = splits[1];
        String wrongAnswer1 = splits[2];
        String wrongAnswer2 = splits[3];
        String wrongAnswer3 = splits[4];
        Question question=new Question();
        question.setQuestion(questionSt);
        question.setRightAnswer(rightAnswer);
        question.addWrongAnswer(wrongAnswer1);
        question.addWrongAnswer(wrongAnswer2);
        question.addWrongAnswer(wrongAnswer3);
        System.out.println(question.toString());
    }
1.问题1
A.正确答案
B.回答错误
C.回答错误
D.回答错误

  • 问题2
    A.正确答案
    B.回答错误
    C.回答错误
    D.回答错误
  • 现在我想将所有问题提取到问题对象的arraylist中。但我需要一个正则表达式模式来将word文件中的字符串拆分为单独的问题


    有人能为这个问题推荐一个好的正则表达式模式吗?

    创建一个问题类,如下所示

    public class Question {
    
    String question;
    String rightAnswer;
    ArrayList<String> wrongAnswers;
    public Question() {
        super();
        wrongAnswers=new ArrayList();
    }
    
    public String getQuestion() {
        return question;
    }
    
    
    
    public void setQuestion(String question) {
        this.question = question;
    }
    
    
    
    public void setRightAnswer(String rightAnswer) {
        this.rightAnswer=rightAnswer;
    }
    
    public void addWrongAnswer(String wrongAnswer) {
        wrongAnswers.add(wrongAnswer);
        Collections.shuffle(wrongAnswers);
    }
    
    public String getRightAnswer() {
        return rightAnswer;
    }
    
    public String getRandomWrongAnswer() {
        Random random=new Random();
        int index=random.nextInt(3);
        return wrongAnswers.get(index);
    }
    
    public ArrayList<String> getWrongAnswers(){
        return wrongAnswers;
    }
    
    
    }
    
    String regex = "[0-9\\(\\)]+\\.\\s(.*?)[0-9\\(\\)]+\\.\\s";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(wholeFileAsString);
        ArrayList<String> allQuestions = new ArrayList<String>();
        while (m.find()) {
            allQuestions.add(m.group(1));
        }
        System.out.println("Total Questions : "+allQuestions.size());
        for (String QuestionString : allQuestions) {
            String regex2 = "\\s[a-zA-Z]\\.\\s";
            String splits[] = QuestionString.split(regex2);
            String questionSt = splits[0];
            String rightAnswer = splits[1];
            String wrongAnswer1 = splits[2];
            String wrongAnswer2 = splits[3];
            String wrongAnswer3 = splits[4];
            Question question=new Question();
            question.setQuestion(questionSt);
            question.setRightAnswer(rightAnswer);
            question.addWrongAnswer(wrongAnswer1);
            question.addWrongAnswer(wrongAnswer2);
            question.addWrongAnswer(wrongAnswer3);
            System.out.println(question.toString());
        }
    
    公开课问题{
    字符串问题;
    字符串右键回答;
    ArrayList错误答案;
    公众问题({
    超级();
    错误答案=新建ArrayList();
    }
    公共字符串getQuestion(){
    返回问题;
    }
    公共问题(字符串问题){
    这个问题=问题;
    }
    public void setRightAnswer(字符串rightAnswer){
    this.rightAnswer=rightAnswer;
    }
    public void addErrorAnswer(字符串错误答案){
    错误答案。添加(错误答案);
    集合。洗牌(错误答案);
    }
    公共字符串getRightAnswer(){
    返回正确答案;
    }
    公共字符串getRandomErrorAnswer(){
    随机=新随机();
    int index=random.nextInt(3);
    返回错误答案。获取(索引);
    }
    公共数组列表getErrorAnswers(){
    返回错误答案;
    }
    }
    
    在主要方法中,请执行以下操作

    public class Question {
    
    String question;
    String rightAnswer;
    ArrayList<String> wrongAnswers;
    public Question() {
        super();
        wrongAnswers=new ArrayList();
    }
    
    public String getQuestion() {
        return question;
    }
    
    
    
    public void setQuestion(String question) {
        this.question = question;
    }
    
    
    
    public void setRightAnswer(String rightAnswer) {
        this.rightAnswer=rightAnswer;
    }
    
    public void addWrongAnswer(String wrongAnswer) {
        wrongAnswers.add(wrongAnswer);
        Collections.shuffle(wrongAnswers);
    }
    
    public String getRightAnswer() {
        return rightAnswer;
    }
    
    public String getRandomWrongAnswer() {
        Random random=new Random();
        int index=random.nextInt(3);
        return wrongAnswers.get(index);
    }
    
    public ArrayList<String> getWrongAnswers(){
        return wrongAnswers;
    }
    
    
    }
    
    String regex = "[0-9\\(\\)]+\\.\\s(.*?)[0-9\\(\\)]+\\.\\s";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(wholeFileAsString);
        ArrayList<String> allQuestions = new ArrayList<String>();
        while (m.find()) {
            allQuestions.add(m.group(1));
        }
        System.out.println("Total Questions : "+allQuestions.size());
        for (String QuestionString : allQuestions) {
            String regex2 = "\\s[a-zA-Z]\\.\\s";
            String splits[] = QuestionString.split(regex2);
            String questionSt = splits[0];
            String rightAnswer = splits[1];
            String wrongAnswer1 = splits[2];
            String wrongAnswer2 = splits[3];
            String wrongAnswer3 = splits[4];
            Question question=new Question();
            question.setQuestion(questionSt);
            question.setRightAnswer(rightAnswer);
            question.addWrongAnswer(wrongAnswer1);
            question.addWrongAnswer(wrongAnswer2);
            question.addWrongAnswer(wrongAnswer3);
            System.out.println(question.toString());
        }
    
    String regex=“[0-9\\(\\)]+\\.\\s(.*)[0-9\\(\\)]+\.\\s”;
    Pattern p=Pattern.compile(regex);
    Matcher m=p.Matcher(wholeFileAsString);
    ArrayList allQuestions=新的ArrayList();
    while(m.find()){
    添加(m组(1));
    }
    System.out.println(“总问题:+allQuestions.size());
    for(字符串问题字符串:所有问题){
    字符串regex2=“\\s[a-zA-Z]\\.\\s”;
    String splits[]=QuestionString.split(regex2);
    字符串questionSt=splits[0];
    字符串rightAnswer=splits[1];
    字符串错误应答1=拆分[2];
    字符串错误应答2=拆分[3];
    字符串错误应答3=拆分[4];
    问题=新问题();
    问题.设置问题(问题ST);
    问题。setRightAnswer(rightAnswer);
    问题。添加错误答案(错误答案1);
    问题。添加错误答案(错误答案2);
    问题。添加错误答案(错误答案3);
    System.out.println(question.toString());
    }
    
    可能是这样的
    \d\\w+\?
    (必须转换为java)。然而,你的问题非常广泛,我敢打赌有更好的方法来解决这个问题,但这并不奏效。它仅提取与此模式匹配的问题的一些答案。请尝试将整体字符串的换行符替换为空。替换(“\n”和“);