Извлечение MCQ из файла String в Arraylist отдельного объекта Questions
У меня есть этот файл DOCX, который я анализирую с помощью Apache POI . Файл имеет вопросы и несколько ответов, как, например, следующие
1. Вопрос1
А. Правильный ответ
Б. Неправильный ответ
C. Неправильный ответ
D. Неправильный ответ
- Вопрос 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());
}