package com.yunhai.acaclassassign.service.assign; import java.util.HashMap; import java.util.Map; /** * 姓名同音判定:内置常用同音字组(姓氏 + 名字常用字)。 *

同组内任意字视为同音。soundKey 将姓名逐字映射为组代表字/原字后拼接。

*/ public final class SameSound { private SameSound() { } /** 同音字组(移植自分班原型 45 组常用同音字表) */ private static final String[] GROUPS = { "张章彰樟", "李理莉鲤里", "王旺望", "刘留流榴", "陈晨尘辰橙", "杨扬洋阳羊", "黄煌凰皇", "赵兆照罩", "吴梧吾无芜", "徐绪储", "孙损笋", "马玛码", "朱珠株珠诸", "胡湖糊蝴狐", "郭锅国帼", "何合河荷和", "高膏糕羔", "林淋琳霖麟", "罗锣萝箩络", "郑正证政挣", "梁粱良凉", "谢卸蟹泄", "宋送诵颂", "唐糖塘堂棠", "许序絮绪", "韩含寒涵涵函", "冯逢缝凤", "邓灯登等", "曹槽草漕", "彭澎蓬鹏棚", "曾增憎", "肖削消宵萧潇霄", "田填甜佃", "董懂冬", "袁元园原源圆员", "蔡菜采彩", "蒋桨讲奖", "余鱼渔愉于娱俞豫", "杜肚度渡镀", "叶页夜业", "程成城诚呈橙乘", "苏酥俗", "魏位未卫味畏", "吕铝侣旅履", "丁钉叮盯叮宁" }; private static final Map 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(); } }