Извлечение MCQ из файла String в Arraylist отдельного объекта Questions

У меня есть этот файл DOCX, который я анализирую с помощью Apache POI . Файл имеет вопросы и несколько ответов, как, например, следующие

1. Вопрос1
А. Правильный ответ
Б. Неправильный ответ
C. Неправильный ответ
D. Неправильный ответ

  1. Вопрос 2
    А. Правильный ответ
    Б. Неправильный ответ
    C. Неправильный ответ
    D. Неправильный ответ

Теперь я хочу извлечь все вопросы в массив объектов вопросов. Но мне нужен шаблон регулярных выражений, чтобы разбить строку из файла слов на отдельные вопросы.

Кто-нибудь может предложить хороший шаблон регулярных выражений для этого?

1 ответ

Решение

Создайте класс Вопрос, как следующий

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());
    }
Другие вопросы по тегам