55 lines
2.2 KiB
Java
55 lines
2.2 KiB
Java
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();
|
|
}
|
|
}
|