package com.fr.design.mainframe.alphafine; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.alphafine.search.manager.impl.ProductNewsSearchManager; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; import java.util.Set; /** * @author hades * @version 11.0 * Created by hades on 2022/4/20 */ public class AlphaFineUtil { public static String highLightModelName(String modelName, String[] strings) { if (strings == null || ArrayUtils.isEmpty(strings)) { return modelName; } for (String string : strings) { // 高亮分词 跳过高亮颜色本身的字符 boolean skipHighLight = modelName.contains(AlphaFineConstants.HIGH_LIGHT_COLOR) && AlphaFineConstants.HIGH_LIGHT_COLOR.contains(string); if (skipHighLight) { continue; } String primaryStr = getReplacedString(modelName, string); if (StringUtils.isNotEmpty(primaryStr)) { modelName = modelName.replaceAll("(?i)" + primaryStr, "|" + primaryStr + "|"); } } modelName = "" + modelName.replaceAll("\\|", StringUtils.EMPTY) + ""; return modelName; } private static String getReplacedString(String modelName, String string) { // 如果是直接包含了高亮字符 返回 if (StringUtils.contains(modelName, string)) { return string; } //需要考虑modelName有空格的情况 //比如现在是work boo k 搜索词是workb,应该要替换的部分是work b //先去掉已经匹配替换过的部分,因为考虑到分词的情况,可能会进行多次替换 final String regex = "\\|\\|"; modelName = modelName.replaceAll(regex, StringUtils.EMPTY); //再去掉空格进行匹配 String noBlackName = modelName.replaceAll(StringUtils.BLANK, StringUtils.EMPTY).toLowerCase(); int index = noBlackName.indexOf(string.toLowerCase()); if (index == -1) { return StringUtils.EMPTY; } StringBuilder result = new StringBuilder(); int count = 0; while (count < string.length()) { char pos = modelName.charAt(index++); result.append(pos); count += pos == ' ' ? 0 : 1; } return result.toString(); } public static String escapeExprSpecialWord(String keyword) { if (StringUtils.isNotBlank(keyword)) { String[] fbsArr = { "\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|" }; for (String key : fbsArr) { if (keyword.contains(key)) { keyword = keyword.replace(key, "\\" + key); } } } return keyword; } public static boolean unread() { Set readSet = DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().getReadSet(); Set idSet = ProductNewsSearchManager.getInstance().getIdSet(); return !idSet.isEmpty() && !readSet.containsAll(idSet); } }