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;
|
}
|
}
|