姓氏拼音,多音字的解决方法

常见的姓氏就这么多,直接多映射就好了

public class PinyinUtil {

    public final static String[] BAI_JIA_XING_P = {"z", "q", "s", "l", "z", "w", "z", "w", "f", "c", "c", "w", "j", "s", "h", "y", "z", "q", "y", "x", "h", "L", "s", "z", "k", "c", "y", "h", "j", "w", "t", "j", "q", "x", "z", "y", "b", "s", "d", "z", "y", "s", "p", "g", "x", "f", "p", "L", "L", "w", "c", "m", "m", "f", "h", "f", "y", "R", "y", "L", "f", "b", "s", "t", "f", "L", "c", "x", "L", "h", "n", "t", "t", "y", "L", "b", "h", "w", "ā", "c", "y", "y", "s", "f", "p", "b", "q", "k", "w", "y", "y", "b", "g", "m", "p", "h", "h", "m", "x", "y", "y", "s", "z", "w", "q", "m", "y", "d", "m", "b", "m", "z", "j", "f", "c", "d", "t", "s", "m", "p", "x", "j", "s", "q", "x", "z", "d", "L", "d", "R", "L", "m", "x", "j", "m", "q", "j", "L", "L", "w", "j", "t", "y", "g", "m", "s", "L", "d", "z", "x", "q", "L", "g", "x", "c", "t", "f", "h", "L", "h", "y", "w", "z", "k", "z", "g", "L", "m", "j", "f", "q", "m", "g", "x", "y", "z", "d", "x", "b", "d", "y", "s", "h", "h", "b", "z", "z", "s", "c", "j", "n", "g", "c", "j", "x", "h", "p", "L", "R", "w", "x", "y", "y", "h", "z", "q", "j", "f", "R", "y", "c", "j", "j", "b", "m", "s", "j", "d", "f", "w", "w", "j", "b", "g", "m", "k", "s", "g", "c", "h", "f", "p", "q", "x", "b", "y", "q", "z", "y", "g", "n", "q", "L", "b", "g", "t", "L", "R", "z", "w", "f", "L", "j", "z", "s", "L", "y", "x", "s", "s", "g", "L", "j", "b", "y", "s", "b", "h", "p", "t", "c", "è", "s", "x", "j", "L", "z", "L", "t", "m", "c", "q", "y", "y", "x", "n", "c", "s", "w", "s", "d", "z", "t", "g", "L", "p", "j", "s", "f", "d", "R", "z", "L", "y", "x", "q", "s", "g", "p", "n", "s", "t", "b", "h", "y", "j", "j", "p", "s", "n", "w", "b", "z", "y", "c", "q", "y", "c", "m", "L", "R", "x", "h", "à", "y", "R", "x", "g", "y", "s", "g", "L", "y", "z", "j", "j", "h", "b", "d", "g", "m", "h", "k", "g", "w", "k", "g", "L", "q", "d", "ō", "s", "w", "L", "y", "y", "k", "L", "s", "g", "s", "n", "c", "g", "á", "R", "L", "z", "x", "k", "n", "j", "R", "k", "z", "w", "s", "n", "y", "j", "x", "f", "c", "g", "k", "x", "z", "h", "j", "h", "y", "z", "q", "L", "g", "y", "h", "g", "m", "q", "s", "m", "s", "g", "o", "y", "x", "h", "z", "g", "w", "r", "d", "f", "h", "l", "h", "f", "y", "c", "g", "y", "t", "t", "g", "y", "z", "z", "p", "y", "c", "y", "c", "y", "t", "s", "s", "t", "g", "s", "z", "s", "x", "y", "L", "h", "z", "l", "y", "w", "z", "s", "m", "r", "x", "y", "L", "q", "s", "t", "s", "k", "q", "g", "s", "k", "z", "d", "z", "j", "z", "s", "d", "m", "w", "m", "g", "x", "q", "d", "y", "z", "R", "s", "g", "l", "t", "b", "j", "g", "z", "f", "g", "l", "j", "c", "y", "f", "r", "y", "t", "q", "d", "g", "b", "l", "d", "g", "n", "m", "h", "y", "g", "h", "y", "s", "w", "s", "y", "s", "g", "k", "k", "h", "y", "q", "L", "q", "z", "q", "d", "m", "x", "m", "s", "m", "s", "n", "b", "s", "n", "g", "m", "h", "q", "d", "n", "a", "y", "t", "d", "w", "y", "f", "b", "j", "x", "z"};
    public final static String[] BAI_JIA_XING_W = {"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安", "常", "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成", "戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席", "季", "麻", "强", "贾", "路", "娄", "危", "江", "童", "颜", "郭", "梅", "盛", "林", "刁", "钟", "徐", "邱", "骆", "高", "夏", "蔡", "田", "樊", "胡", "凌", "霍", "虞", "万", "支", "柯", "昝", "管", "卢", "莫", "经", "房", "裘", "缪", "干", "解", "应", "宗", "丁", "宣", "贲", "邓", "郁", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉", "钮", "龚", "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁", "荀", "羊", "於", "惠", "甄", "曲", "家", "封", "芮", "羿", "储", "靳", "汲", "邴", "糜", "松", "井", "段", "富", "巫", "乌", "焦", "巴", "弓", "牧", "隗", "山", "谷", "车", "侯", "宓", "蓬", "全", "郗", "班", "仰", "秋", "仲", "伊", "宫", "宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎", "祖", "武", "符", "刘", "景", "詹", "束", "龙", "叶", "幸", "司", "韶", "郜", "黎", "蓟", "薄", "印", "宿", "白", "怀", "蒲", "邰", "从", "鄂", "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙", "池", "乔", "阴", "鬱", "胥", "能", "苍", "双", "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄", "姬", "申", "扶", "堵", "冉", "宰", "郦", "雍", "卻", "璩", "桑", "桂", "濮", "牛", "寿", "通", "边", "扈", "燕", "冀", "郏", "浦", "尚", "农", "温", "别", "庄", "晏", "柴", "瞿", "阎", "充", "慕", "连", "茹", "习", "宦", "艾", "鱼", "容", "向", "古", "易", "慎", "戈", "廖", "庾", "终", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "匡", "国", "文", "寇", "广", "禄", "阙", "东", "欧", "殳", "沃", "利", "蔚", "越", "夔", "隆", "师", "巩", "厍", "聂", "晁", "勾", "敖", "融", "冷", "訾", "辛", "阚", "那", "简", "饶", "空", "曾", "毋", "沙", "乜", "养", "鞠", "须", "丰", "巢", "关", "蒯", "相", "查", "后", "荆", "红", "游", "竺", "权", "逯", "盖", "益", "桓", "公", "万", "俟", "司", "马", "上", "官", "欧", "阳", "夏", "侯", "诸", "葛", "闻", "人", "东", "方", "赫", "连", "皇", "甫", "尉", "迟", "公", "羊", "澹", "台", "公", "冶", "宗", "政", "濮", "阳", "淳", "于", "单", "于", "太", "叔", "申", "屠", "公", "孙", "仲", "孙", "轩", "辕", "令", "狐", "钟", "离", "宇", "文", "长", "孙", "慕", "容", "鲜", "于", "闾", "丘", "司", "徒", "司", "空", "丌", "官", "司", "寇", "仉", "督", "子", "车", "颛", "孙", "端", "木", "巫", "马", "公", "西", "漆", "雕", "乐", "正", "壤", "驷", "公", "良", "拓", "跋", "夹", "谷", "宰", "父", "谷", "梁", "晋", "楚", "闫", "法", "汝", "鄢", "涂", "钦", "段", "干", "百", "里", "东", "郭", "南", "门", "呼", "延", "归", "海", "羊", "舌", "微", "生", "岳", "帅", "缑", "亢", "况", "郈", "有", "琴", "梁", "丘", "左", "丘", "东", "门", "西", "门", "商", "牟", "佘", "佴", "伯", "赏", "南", "宫", "墨", "哈", "谯", "笪", "年", "爱", "阳", "佟", "第", "五", "言", "福", "百", "家", "姓", "终",};
    private static HashMap<Character, String> BAI_JIA_XING_MAP = new HashMap<>();

    static {
        for (int i = 0; i < BAI_JIA_XING_W.length; i++) {
            BAI_JIA_XING_MAP.put(BAI_JIA_XING_W[i].charAt(0), BAI_JIA_XING_P[i]);
        }
    }

    /**
     * 将汉字转换为全拼
     *
     * @param src
     * @return String
     */
    public static String getPinYin(String src) {
        if (TextUtils.isEmpty(src)) {
            return null;
        }

        char[] charArray = src.toCharArray();

        // 设置汉字拼音输出的格式
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        String result = "";
        try {
            for (char c : charArray) {
                // 判断是否为汉字字符
                if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {

                    String s = BAI_JIA_XING_MAP.get(c);
                    if (null != s) {
                        result += s;
                        continue;
                    }

                    String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c, format);// 将汉字的几种全拼都存到t2数组中
                    if (pinyins != null && pinyins.length > 0) {
                        result += pinyins[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
                    }
                } else {
                    // 如果不是汉字字符,直接取出字符并连接到字符串t4后
                    result += Character.toString(c);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 提取每个汉字的首字母
     *
     * @param str
     * @return String
     */
    public static String getPinYinHeadChar(String str) {
        if (TextUtils.isEmpty(str)) {
            return null;
        }

        String convert = "";
        for (int j = 0; j < str.length(); j++) {
            char word = str.charAt(j);
            // 提取汉字的首字母
            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
            if (pinyinArray != null) {
                convert += pinyinArray[0].charAt(0);
            } else {
                convert += word;
            }
        }
        return convert;
    }

    public static String getPinYinHeadCharName(String str) {
        if (TextUtils.isEmpty(str)) {
            return null;
        }

        String convert = "";
        for (int j = 0; j < str.length(); j++) {
            char word = str.charAt(j);
            // 提取汉字的首字母
            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
            String s = BAI_JIA_XING_MAP.get(word);
            if (null != s) {
                convert += s;
                continue;
            }

            if (pinyinArray != null) {
                convert += pinyinArray[0].charAt(0);
            } else {
                convert += word;
            }
        }
        return convert;
    }
}

猜你喜欢

转载自my.oschina.net/carbenson/blog/1802015