Java 将字符串文件中的MCQ提取到单个问题对象的Arraylist中
我有这个docx文件,我正在使用apachepoi解析它 .该文件包含以下问题和多个答案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
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.回答错误
A.正确答案
B.回答错误
C.回答错误
D.回答错误
有人能为这个问题推荐一个好的正则表达式模式吗?创建一个问题类,如下所示
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”和“);