中文汉字转拼音首字母

Utils:

public class HanZiConverterPinYinUtil {

    public HanZiConverterPinYinUtil() {
        // 初始化汉字拼音字母对照表
        initChinesePinyinComparisonMapList();
    }

    /**
     * 汉字拼音字母对照类
     */
    @Data
    @AllArgsConstructor
    private class ChinesePinyinComparisonMap {
        // 区间开头
        private int sAscll;

        // 区间结尾
        private int eAscll;

        // 对应字母
        private char code;
    }

    /**
     * 汉字拼音字母对照表
     */
    private List<ChinesePinyinComparisonMap> chinesePinyinComparisonMapList;

    /**
     * 初始化汉字拼音字母对照表
     */
    private void initChinesePinyinComparisonMapList() {
        chinesePinyinComparisonMapList = new ArrayList<ChinesePinyinComparisonMap>();

        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-20319, -20284, 'A'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-20283, -19776, 'B'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-19775, -19219, 'C'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-19218, -18711, 'D'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18710, -18527, 'E'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18526, -18240, 'F'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18239, -17923, 'G'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-17922, -17418, 'H'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-17417, -16475, 'J'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-16474, -16213, 'K'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-16212, -15641, 'L'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-15640, -15166, 'M'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-15165, -14923, 'N'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14922, -14915, 'O'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14914, -14631, 'P'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14630, -14150, 'Q'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14149, -14091, 'R'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14090, -13319, 'S'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-13318, -12839, 'T'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-12838, -12557, 'W'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-12556, -11848, 'X'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-11847, -11056, 'Y'));
        chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-11055, -10247, 'Z'));
    }

    /**
     * 遍历获取首字母
     */
    public char getPY(char c) throws Exception {
        byte[] bytes = String.valueOf(c).getBytes("GBK");

        //双字节汉字处理
        if (bytes.length == 2) {

            int hightByte = 256 + bytes[0];
            int lowByte = 256 + bytes[1];
            int asc = (256 * hightByte + lowByte) - 256 * 256;

            // 遍历转换
            for (ChinesePinyinComparisonMap map : this.chinesePinyinComparisonMapList) {
                if (asc >= map.getSAscll() && asc <= map.getEAscll()) {
                    return map.getCode();
                }
            }
        }

        // 单字节或其他直接输入,不执行编码
        return c;
    }

    /**
     * 获取汉字拼音
     */
    public String getHanZiPY(String str) {
        try {
            StringBuilder pyStrBd = new StringBuilder();

            for (char c : str.toCharArray()) {
                pyStrBd.append(getPY(c));
            }

            return pyStrBd.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }  
}

实现:

public static void main(String[] args) {
        HanZiConverterPinYinUtil hanZiConverterPinYin = new HanZiConverterPinYinUtil();
        String code = hanZiConverterPinYin.getHanZiPY("海鲜大咖");
        System.out.println(code);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值