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 ItemAnalysisParser extends Parser {
|
|
/**
|
* 解析字符串
|
*/
|
private String analysisStr = "解析";
|
|
/**
|
* 解析字符串正则模式
|
*/
|
private Pattern analysis = Pattern.compile(analysisStr);
|
|
|
@Override
|
public ParseResult parse(Node node, String str) {
|
return parseAnalysis((Item)node,str);
|
}
|
|
/**
|
* 解析 Item 参考答案
|
* 1.解析出类似 *** ( ab ) 这样的参考答案
|
* 2.将类似参考答案 ( ab ) 替换成 ( )
|
* @param item
|
* @param str
|
* @return
|
*/
|
private ParseResult parseAnalysis(Item item, String str) {
|
|
//习题选项
|
Matcher analysisMatch = analysis.matcher(str);
|
|
//返回
|
if(!matchBegin(analysisMatch)){
|
return new ParseResult(false,ParseResult.STEP_CUR,null);
|
}
|
|
analysisMatch.reset();
|
if(analysisMatch.find()){
|
|
String group = analysisMatch.group();
|
|
String analysisS = str.substring(group.length());
|
|
if(StringUtils.isEmpty(item.getAnalysis())){
|
item.setAnalysis(beautyContent(analysisS));
|
}else{
|
item.setAnalysis(item.getAnalysis().concat(beautyContent(analysisS)));
|
}
|
|
}
|
|
//20150907修改:本来返回true,没有解析到一个类型,抛到上层
|
return new ParseResult(false,ParseResult.STEP_CUR,null);
|
|
}
|
|
/**
|
* 去除文本中多余字符
|
* @param content
|
* @return
|
*/
|
private String beautyContent(String str){
|
String prefix = "::.。~、、..";
|
String content = str;
|
while(content.length()>0 && prefix.contains(content.substring(0, 1))){
|
content = content.substring(1);
|
}
|
return content;
|
}
|
}
|