package com.qxueyou.scc.exercise.service.impl.parser; import java.util.HashMap; import java.util.Map; 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; import com.qxueyou.scc.exercise.service.impl.node.ItemType; public class ItemTypeParser extends Parser { /** * 习题类型关键字 */ private static Map typeMap = new HashMap(); static{ typeMap.put("单选", ItemType.TYPE_SINGLE); typeMap.put("单项选择", ItemType.TYPE_SINGLE); typeMap.put("多选", ItemType.TYPE_MULTI); typeMap.put("多项选择", ItemType.TYPE_MULTI); typeMap.put("判断", ItemType.TYPE_TRUE_OR_FALSE); } /** * 习题开始模式匹配 */ Pattern itemPattern = Pattern.compile("\\d+"); @Override public ParseResult parse(Node node, String str) { return parse((ItemType) node, str); } /** * 解析 ItemType * * @param doc * @param str * @return */ private ParseResult parse(ItemType itemType, String str) { // 习题 Matcher matcher = itemPattern.matcher(str); if (matchBegin(matcher) && StringUtils.isNotEmpty(itemType.getType())) { Item item = new Item(); itemType.addNode(item); return new ParseResult(false, ParseResult.STEP_NEXT, item); } // 题目类型 for (String keyword : typeMap.keySet()) { if (str.contains(keyword)) { if(itemType.getType().equals(typeMap.get(keyword))){ return new ParseResult(true, ParseResult.STEP_CUR, null); }else{ return new ParseResult(false, ParseResult.STEP_PRE, null); } } } //20150907修改:本来返回true,没有解析到一个类型,抛到上层 return new ParseResult(false, ParseResult.STEP_PRE, null); } }