commit
build / build-push (push) Successful in 1m29s

This commit is contained in:
wanghu
2026-10-21 15:00:26 +08:00
parent b857575710
commit 9e83208f35
117 changed files with 13358 additions and 0 deletions
@@ -0,0 +1,54 @@
package com.yunhai.acaclassassign.service.assign;
import java.util.HashMap;
import java.util.Map;
/**
* 姓名同音判定:内置常用同音字组(姓氏 + 名字常用字)。
* <p>同组内任意字视为同音。soundKey 将姓名逐字映射为组代表字/原字后拼接。</p>
*/
public final class SameSound {
private SameSound() {
}
/** 同音字组(移植自分班原型 45 组常用同音字表) */
private static final String[] GROUPS = {
"张章彰樟", "李理莉鲤里", "王旺望", "刘留流榴", "陈晨尘辰橙",
"杨扬洋阳羊", "黄煌凰皇", "赵兆照罩", "吴梧吾无芜", "徐绪储",
"孙损笋", "马玛码", "朱珠株珠诸", "胡湖糊蝴狐", "郭锅国帼",
"何合河荷和", "高膏糕羔", "林淋琳霖麟", "罗锣萝箩络", "郑正证政挣",
"梁粱良凉", "谢卸蟹泄", "宋送诵颂", "唐糖塘堂棠", "许序絮绪",
"韩含寒涵涵函", "冯逢缝凤", "邓灯登等", "曹槽草漕", "彭澎蓬鹏棚",
"曾增憎", "肖削消宵萧潇霄", "田填甜佃", "董懂冬", "袁元园原源圆员",
"蔡菜采彩", "蒋桨讲奖", "余鱼渔愉于娱俞豫", "杜肚度渡镀", "叶页夜业",
"程成城诚呈橙乘", "苏酥俗", "魏位未卫味畏", "吕铝侣旅履", "丁钉叮盯叮宁"
};
private static final Map<Character, Character> CHAR_TO_REP = new HashMap<>();
static {
for (String group : GROUPS) {
final char rep = group.charAt(0);
for (char c : group.toCharArray()) {
CHAR_TO_REP.putIfAbsent(c, rep);
}
}
}
/**
* 姓名同音键:逐字映射同音组代表字后拼接。
*/
public static String soundKey(String name) {
if (name == null) {
return "";
}
final String trimmed = name.trim();
final StringBuilder sb = new StringBuilder(trimmed.length());
for (int i = 0; i < trimmed.length(); i++) {
final Character rep = CHAR_TO_REP.get(trimmed.charAt(i));
sb.append(rep == null ? trimmed.charAt(i) : rep.charValue());
}
return sb.toString();
}
}