package cn.exrick.xboot.core.common.utils; 
 | 
  
 | 
import cn.exrick.xboot.core.common.exception.XbootException; 
 | 
import cn.exrick.xboot.core.service.StopWordService; 
 | 
import cn.hutool.core.util.StrUtil; 
 | 
import cn.hutool.dfa.WordTree; 
 | 
import cn.hutool.extra.spring.SpringUtil; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
  
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * @author exrick 
 | 
 */ 
 | 
@Slf4j 
 | 
public class StopWordsUtil { 
 | 
  
 | 
    private static StopWordService stopWordService = SpringUtil.getBean(StopWordService.class); 
 | 
  
 | 
    private StopWordsUtil() { 
 | 
  
 | 
    } 
 | 
  
 | 
    private static WordTree wordTree; 
 | 
  
 | 
    public static WordTree getInstance() { 
 | 
  
 | 
        if (wordTree == null) { 
 | 
            // 初始加载数据 
 | 
            wordTree = new WordTree(); 
 | 
            stopWordService.getAll().forEach(e -> wordTree.addWord(e.getTitle())); 
 | 
        } 
 | 
        return wordTree; 
 | 
    } 
 | 
  
 | 
    public static void addWord(String word) { 
 | 
  
 | 
        getInstance().addWord(word); 
 | 
    } 
 | 
  
 | 
    public static void removeWord(String word) { 
 | 
  
 | 
        getInstance().remove(word); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 返回匹配的词 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    public static String match(String param) { 
 | 
  
 | 
        return getInstance().match(param); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 检测到禁用词直接抛出异常 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    public static void matchWord(String param) { 
 | 
  
 | 
        if (StrUtil.isNotBlank(match(param))) { 
 | 
            throw new XbootException("包含禁用词:" + param); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 返回所有匹配的词 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    public static List<String> matchAll(String param) { 
 | 
  
 | 
        return getInstance().matchAll(param); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 将匹配词过滤为* 
 | 
     * @param param 
 | 
     * @return 
 | 
     */ 
 | 
    public static String filter(String param) { 
 | 
  
 | 
        return filter(param, "*"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 自定义替换符号字符 
 | 
     * @param param 
 | 
     * @param replacement 
 | 
     * @return 
 | 
     */ 
 | 
    public static String filter(String param, String replacement) { 
 | 
  
 | 
        for(String e : matchAll(param)){ 
 | 
            param = param.replaceAll(e, replacement); 
 | 
        } 
 | 
        return param; 
 | 
    } 
 | 
} 
 |