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; } }