• 中文汉字转拼音首字母


    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;
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103

    实现:

    public static void main(String[] args) {
            HanZiConverterPinYinUtil hanZiConverterPinYin = new HanZiConverterPinYinUtil();
            String code = hanZiConverterPinYin.getHanZiPY("海鲜大咖");
            System.out.println(code);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    IntelliJ IDEA 使用 Maven 时不加载本地私服的最新版本快照(snapshot)JAR 包
    图文并茂演示小程序movable-view的可移动范围
    解决局域网内因为不在同一网段无法ping通的问题
    idea Java代码格式化规范
    高职院校云计算人才培养成果导向系统构建、实施要点与评量方法
    MYSQL的存储过程
    table通过伪类实现 另类自适应
    Spring MVC 中的分页 RESTful API 响应
    为什么Git的教程都那么繁杂?
    RS485和RS232有什么区别?工业网关能用吗?
  • 原文地址:https://blog.csdn.net/qq_44860722/article/details/126783073