高亮显示
偶见有人谈起高亮显示的或这或那得错误。感觉自写个也挺简单的,可控制性强。
?
贴个原创的,用于“眉湖通”搜索。
/** * */package util;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashSet;import java.util.List;import org.wltea.analyzer.IKSegmentation;import org.wltea.analyzer.Lexeme;/** * * 高亮,使用IK分词 * @author zzu.nlp.liguohua * */public class highLighter {private String[] getSplitStr(String s, String regx){return s.split(regx);}/** * * @param searchWord 搜索的关键词(需要高亮显示的原始字串) * @return 返回searchWord经过分词后的词组,即一组需要高亮显示的子串 */public static List<String> getKeywords(String searchWord){StringReader sr=new StringReader(searchWord);IKSegmentation iks=new IKSegmentation(sr);//向右最大匹配Comparator<String> comp=new Comparator<String>(){public int compare(String o1, String o2) {return o2.length()-o1.length();}};Lexeme l;HashSet<String> hs=new HashSet<String>(5);try {while((l=iks.next())!=null){hs.add(l.getLexemeText());}} catch (IOException e) {e.printStackTrace();}List<String> al=new ArrayList<String>();al.addAll(hs);Collections.sort(al,comp);return al;}/** * * @param text 需要进行高亮的文本 * @param al 高亮显示的关键词组 * @return 返回处理的结果 */public static String getHiLightContent(String text, List<String> al){//System.out.println("需要高亮的关键词:"+al.toString());StringBuilder rt=new StringBuilder();String tp="";int tpI=0,k=0;boolean bl=false;//标识第一次命中高亮显示的位置boolean first=false; int ftIdx=0;for(int i=0;i<text.length();){for(int j=0;j<al.size();j++){tpI=i;tp=al.get(j);for(k=0;k<tp.length() && tpI<text.length();k++){if(text.charAt(tpI++)==tp.charAt(k));else break;}if(k==tp.length()){rt.append("<font color=#c60a00>").append(text.substring(i,tpI)).append("</font>");bl=true;if(!first){first=true;ftIdx=i;}break;}}if(!bl) rt.append(text.substring(i,tpI));bl=false;i=tpI;}//return rt.toString();// 摘要截长tp=rt.toString();tp=tp.substring(tp.lastIndexOf('_', ftIdx)+1);//tp=tp.replaceAll("\n", "_");if(tp.length()<300) return tp; else return tp.substring(0,300); }public static String getHiLightContent(String text, String searchWord){return getHiLightContent(text, getKeywords(searchWord));}}??