package com.qxueyou.scc.exercise.service.impl.parser;
|
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import com.qxueyou.scc.exercise.service.impl.Node;
|
import com.qxueyou.scc.exercise.service.impl.ParseResult;
|
import com.qxueyou.scc.exercise.service.impl.Parser;
|
import com.qxueyou.scc.exercise.service.impl.node.Item;
|
|
public class ItemAnswerParser extends Parser {
|
|
/**
|
* 参考答案[带括号]
|
*/
|
private static final String answerWithBracketsStr = "\\([ABCDEFGHIJKLMNOabcdefghijklmno√╳×TFtf]+\\)";
|
|
/**
|
* 参考答案
|
*/
|
private static final String answerStr = "[ABCDEFGHIJKLMNOabcdefghijklmno√╳×TFtf]+";
|
|
/**
|
* 参考答案模式[带括号]
|
*/
|
private static final Pattern answerWithBrackets = Pattern.compile(answerWithBracketsStr);
|
|
/**
|
* 参考答案模式
|
*/
|
private static final Pattern answer = Pattern.compile(answerStr);
|
|
@Override
|
public ParseResult parse(Node node, String str) {
|
return parseAnswer((Item)node,str);
|
}
|
|
/**
|
* 解析 Item 参考答案
|
* 1.解析出类似 *** ( ab ) 这样的参考答案
|
* 2.将类似参考答案 ( ab ) 替换成 ( )
|
* @param item
|
* @param str
|
* @return
|
*/
|
private ParseResult parseAnswer(Item item, String str) {
|
|
//习题选项
|
Matcher answerBracketsMatch = answerWithBrackets.matcher(str);
|
|
//返回
|
if(!answerBracketsMatch.find() || answerBracketsMatch.start()==0){
|
return new ParseResult(false,ParseResult.STEP_CUR,null);
|
}
|
|
Matcher answerMatch = null;
|
|
answerBracketsMatch.reset();
|
if(answerBracketsMatch.find()){
|
|
String answerBrackets = answerBracketsMatch.group();
|
answerMatch = answer.matcher(answerBrackets);
|
answerMatch.find();
|
|
String answer = answerMatch.group();
|
|
item.setAnswer(dealAnswer(answer.toUpperCase()));
|
item.setTitle(item.getTitle().replaceAll(answerWithBracketsStr, "( )"));
|
}
|
|
//20150907修改:本来返回true,没有解析到一个类型,抛到上层
|
return new ParseResult(false,ParseResult.STEP_PRE,null);
|
|
}
|
|
/**
|
* 处理answer
|
* @param answer
|
* @return
|
*/
|
private String dealAnswer(String answer){
|
if(StringUtils.equalsIgnoreCase("√",answer)||StringUtils.equalsIgnoreCase("√",answer)||StringUtils.equalsIgnoreCase("T",answer)){
|
return "True";
|
}
|
if(StringUtils.equalsIgnoreCase("×",answer)||StringUtils.equalsIgnoreCase("╳",answer)||StringUtils.equalsIgnoreCase("F",answer)){
|
return "False";
|
}
|
return answer;
|
}
|
}
|