NecharUtils.contain(物品列表匹配封装)

基本信息

属性 值
类型 搜索匹配调用侧封装(静态工具)
实现类 net.moecraft.nechar.NecharUtils
签名 public static boolean contain(String sourseText, String searchText, Boolean enableSpecialSearch)
调用方 默认搜索过滤器、Tooltip 搜索过滤器

该类只对外暴露 contain 一个方法(其余为 private),是物品列表搜索路径上唯一进入 PinIn 引擎的入口。

执行流程

步骤 处理 说明
1 replaceExtraChars 预处理 对 sourseText 与 searchText 双向调用
2 忽略数字千分位逗号 条件:enableIgnoreComma 为 true 且 searchText 不含 , → 对两个文本都调用 deleteComma
3 常规拼音匹配 if (CONTEXT.contains(sourseText, searchText)) return true;
4 电压特殊搜索短路 if (!enableSpecialSearch) return false; —— 开关关闭时到此结束
5 双方转小写 sourseText / searchText 均 toLowerCase()
6 先试 zpm 与 max 任一命中即返回 true
7 前置校验 若 sourseText 与 searchText 都不含 v → 直接返回 false(源码注释:可能很慢,只尝试找到一个电压等级)
8 遍历 13 个带 V 的电压等级 voltageListWithLetterV 任一命中即返回 true,否则 false

deleteComma(String)

正则 (?<=[0-9]),(?=[0-9]) 全局替换为空 —— 只删除两侧都是数字的逗号(千分位分隔符),不会误伤文本中作为标点的逗号。

replaceExtraChars(String)

把部分由**代理对(surrogate pair)**表示的私用区字形归一化为 CustomDictLoader 中登记的单字符码位,使拼音词典能正确识别。按判定的首个代理字符分两组:

触发条件 替换映射(代理对 → 单字符码位)
str.contains("\ud872") \ud872\udf3b→\ue900、\ud872\udf4a→\ue901、\ud872\udf73→\ue902、\ud872\udf5b→\ue903、\ud872\udf76→\ue904、\ud872\udf2d→\ue907
str.contains("\ud86d") \ud86d\udffc→\ue906、\ud86d\udce7→\ue90a、\ud86d\udff7→\ue90c

对应词条见 拼音词典扩展。注意:词典中另有 \u9fcf、\u9fd4、\u9fed、\u9fec、\u9feb 五个码位本身就在 BMP 内(本身就是私用区字符),无需代理对归一化,因此不在此替换表中。

电压特殊搜索

containWithVoltage(String voltage, String sourseText, String searchText)

对单个电压等级做"跳过该电压词的拼音匹配":

步骤 条件 结果
1 !searchText.contains(voltage) false(搜索词里没有这个电压等级)
2 !sourseText.contains(voltage) false(原文里找不到这个电压等级)
3 sList = searchText.split(voltage, 2),若 sList.length == 2 且 !CONTEXT.contains(sourseText, sList[1]) false(电压词之后的残余文本匹配不上)
4 其余 return CONTEXT.contains(sourseText, sList[0]) ——只匹配电压词之前的残余文本

典型场景:物品名 128V 电力机器、搜索词 128 电力机器——split("v", 2) 把搜索词切成 128 与 电力机器,只要求原文包含 128 。

电压等级表

位置 常量 包含的等级
先行单独尝试(步骤 6) 无 v 后缀 zpm、max
循环尝试(步骤 8) voltageListWithLetterV ulv、lv、mv、hv、ev、iv、luv、uv、uhv、uev、uiv、umv、uxv

源码注释明确标注该分支"可能很慢",且循环最多匹配 1 个电压等级(命中即 return true)。开关为 enableSpecialSearch 形参:物品名路径传 enableVoltageSpecialSearchName,提示文本路径传 enableVoltageSpecialSearchTooltips(见 配置系统)。

相关条目