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