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;
|
import com.qxueyou.scc.exercise.service.impl.node.Option;
|
|
public class ItemParser extends Parser {
|
|
/**
|
* ϰÌ⿪ʼģʽƥÅä
|
*/
|
Pattern patternItem = Pattern.compile("\\d+");
|
|
private Pattern analysis = Pattern.compile("½âÎö");
|
|
/**
|
* ϰÌâÑ¡Ïî±àºÅģʽ[´øÀ¨ºÅ]
|
*/
|
//Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFabcdef]\\)?[¡¢.£®]");
|
|
/**
|
* ϰÌâÑ¡Ïî word×Ô´øµÄ¸ñʽµÄ a.a¡¢a) ÕâÈýÖÖ½ÏΪÆÕ±é£¬Ä¿Ç°03¿ÉÒÔ½âÎö³É¹¦£¬07½âÎöʧ°Ü*[\t]
|
*/
|
Pattern optNoWithBrackets = Pattern.compile("\\(?[ABCDEFabcdef]\\)?[.£®¡¢]");
|
|
ItemAnswerParser answerParser = new ItemAnswerParser();
|
|
ItemAnalysisParser analysisParser = new ItemAnalysisParser();
|
|
@Override
|
public ParseResult parse(Node node, String str) {
|
return parse((Item)node,str);
|
}
|
|
/**
|
* ½âÎö Item
|
* @param item
|
* @param str
|
* @return
|
*/
|
private ParseResult parse(Item item, String str) {
|
|
//ϰÌâ
|
Matcher itemNoMatch = patternItem.matcher(str);
|
Matcher optNoWithBracketsMatch = optNoWithBrackets.matcher(str);
|
Matcher analysisMatch = analysis.matcher(str);
|
|
//³¢ÊÔµ÷ÓÃÉϼ¶½âÎöÆ÷¼ÌÐø½âÎö
|
if(!matchBegin(itemNoMatch) && !matchBegin(optNoWithBracketsMatch) && !matchBegin(analysisMatch)){
|
return new ParseResult(false,ParseResult.STEP_PRE,null);
|
}
|
|
|
//½âÎö no,title
|
if(matchBegin(itemNoMatch)){
|
itemNoMatch.find();
|
String no = itemNoMatch.group();
|
if(!StringUtils.isEmpty(item.getNo())){
|
return new ParseResult(false,ParseResult.STEP_PRE,null);
|
}
|
if(itemNoMatch.start()==0){
|
|
String title = str.substring(itemNoMatch.end(),str.length());
|
item.setNo(no);
|
item.setTitle(beautyTitle(title));
|
|
//½âÎö²Î¿¼´ð°¸
|
answerParser.parse(item, str);
|
|
return new ParseResult(true,ParseResult.STEP_CUR,null);
|
}
|
}
|
|
//ϰÌâÑ¡Ïî
|
if(matchBegin(optNoWithBracketsMatch)){
|
Option opt = new Option();
|
item.addNode(opt);
|
return new ParseResult(false,ParseResult.STEP_NEXT,opt);
|
}
|
|
//½âÎö ϰÌâ·ÖÎö
|
if(matchBegin(analysisMatch)){
|
analysisParser.parse(item,str);
|
//20150907Ð޸ģº·µ»Øitem
|
return new ParseResult(true,ParseResult.STEP_CUR,item);
|
}
|
|
//20150907Ð޸ģº±¾À´·µ»Øtrue£¬Ã»ÓнâÎöµ½Ò»¸öÀàÐÍ£¬Å×µ½Éϲã
|
return new ParseResult(false,ParseResult.STEP_PRE,null);
|
|
}
|
|
/**
|
* È¥³ýϰÌâ±êÌâ¶àÓà×Ö·û
|
* @param title
|
* @return
|
*/
|
private String beautyTitle(String title){
|
String prefix = ".¡£~¡¢£®";
|
while(title.length()>0 && prefix.contains(title.substring(0, 1))){
|
title = title.substring(1);
|
}
|
return title;
|
}
|
|
public static void main(String[] args){
|
ItemParser parser = new ItemParser();
|
parser.parse(null, "59¡¢ÔÚÅàѵЧ¹ûÆÀ¹ÀµÄÖ¸±êÖУ¬¼¼ÄÜת»»Ö¸±êͨ³£Í¨¹ý()À´Åжϡ£");
|
}
|
|
}
|