liusheng
10 小时以前 e180e3a496d6f29d3a3b34016400de9d997c6bd9
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
package com.smartor.common;
 
/**
 * @author ls
 * @content
 * @date 2026/4/1
 */
public class PinYinUtil {
    /**
     * 获取拼音
     * @param name
     * @return
     */
    public static String getpy(String name) {
        if (name == null || name.isEmpty()) return "";
        StringBuilder sb = new StringBuilder();
        for (char c : name.toCharArray()) {
            if (c >= '\u4e00' && c <= '\u9fa5') {
                sb.append(getFirstPinyinLetter(c));
            } else if (Character.isLetter(c)) {
                sb.append(Character.toLowerCase(c));
            }
        }
        return sb.toString();
    }
 
    /**
     * 根据汉字 GBK 编码区间返回对应拼音首字母(常用汉字覆盖率 > 99%)
     */
    private static char getFirstPinyinLetter(char c) {
        try {
            byte[] bytes = String.valueOf(c).getBytes("GBK");
            if (bytes.length == 2) {
                int hb = bytes[0] & 0xFF;
                int lb = bytes[1] & 0xFF;
                int gbk = (hb << 8) | lb;
                if (gbk >= 0xB0A1 && gbk <= 0xB0C4) return 'a';
                if (gbk >= 0xB0C5 && gbk <= 0xB2C0) return 'b';
                if (gbk >= 0xB2C1 && gbk <= 0xB4ED) return 'c';
                if (gbk >= 0xB4EE && gbk <= 0xB6E9) return 'd';
                if (gbk >= 0xB6EA && gbk <= 0xB7A1) return 'e';
                if (gbk >= 0xB7A2 && gbk <= 0xB8C0) return 'f';
                if (gbk >= 0xB8C1 && gbk <= 0xB9FD) return 'g';
                if (gbk >= 0xB9FE && gbk <= 0xBBF6) return 'h';
                if (gbk >= 0xBBF7 && gbk <= 0xBFA5) return 'j';
                if (gbk >= 0xBFA6 && gbk <= 0xC0AB) return 'k';
                if (gbk >= 0xC0AC && gbk <= 0xC2E7) return 'l';
                if (gbk >= 0xC2E8 && gbk <= 0xC4C2) return 'm';
                if (gbk >= 0xC4C3 && gbk <= 0xC5B5) return 'n';
                if (gbk >= 0xC5B6 && gbk <= 0xC5BD) return 'o';
                if (gbk >= 0xC5BE && gbk <= 0xC6D9) return 'p';
                if (gbk >= 0xC6DA && gbk <= 0xC8BA) return 'q';
                if (gbk >= 0xC8BB && gbk <= 0xC8F5) return 'r';
                if (gbk >= 0xC8F6 && gbk <= 0xCBF0) return 's';
                if (gbk >= 0xCBFA && gbk <= 0xCDD9) return 't';
                if (gbk >= 0xCDDA && gbk <= 0xCEF3) return 'w';
                if (gbk >= 0xCEF4 && gbk <= 0xD188) return 'x';
                if (gbk >= 0xD1B9 && gbk <= 0xD4D0) return 'y';
                if (gbk >= 0xD4D1 && gbk <= 0xD7F9) return 'z';
            }
        } catch (Exception ignored) {
        }
        return c;
    }
}