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¡Ì¨w¡ÁTFtf]+\\)"; /** * ²Î¿¼´ð°¸ */ private static final String answerStr = "[ABCDEFGHIJKLMNOabcdefghijklmno¡Ì¨w¡Á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("¨w",answer)||StringUtils.equalsIgnoreCase("F",answer)){ return "False"; } return answer; } }