JavaSE-汉字转拼音首字母-全拼-多音字
<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.1</version> </dependency>
PinyinUtils.java
public class PinyinUtils { // public static void main(String[] args) { // String yin = PinyinUtils.getPingYin("缪金瑾"); // System.out.println("yin = " + yin); // // String san = PinyinUtils.getPingYin("单金瑾"); // System.out.println("yin = " + san); // } private static String path = "pinyin.properties"; /** * 将字符串中的中文转化为拼音,英文字符不变 * * @param inputString 姓名 * @return */ public static String getPingYin(String inputString) { HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.UPPERCASE); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_V); String output = ""; if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) { String substring = diffPro(inputString); char[] input = substring.trim().toCharArray(); try { for (int i = 0; i < input.length; i++) { if (java.lang.Character.toString(input[i]).matches( "[\\u4E00-\\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray( input[i], format); output += temp[0]+" "; } else{ output += java.lang.Character.toString(input[i]); } output = output; } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { return ""; } output = output.toLowerCase().replace(" ", ""); return output; } /** * 汉字转换位汉语拼音首字母,英文字符不变 * * @param chines 汉字 * @return 拼音首字母 */ public static String converterToFirstSpell(String chines) { String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray( nameChar[i], defaultFormat)[0].charAt(0); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyinName += nameChar[i]; } } return pinyinName; } /** * 与pinyin.properties中多音字的姓名对比 * @param inputString 中文姓名 * @return 百家姓的拼音读法 */ private static String diffPro(String inputString){ Properties properties = new Properties(); try { InputStream resourceAsStream = PinyinUtils.class.getClassLoader().getResourceAsStream(path); InputStream inputStream = Objects.requireNonNull(resourceAsStream); InputStreamReader reader = new InputStreamReader(inputStream,"utf-8"); properties.load(reader); reader.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Set keyValue = properties.keySet(); for (Iterator it = keyValue.iterator(); it.hasNext();){ String key = (String) it.next(); if(inputString.substring(0, key.length()).equals(key)){ String value = inputString.substring(key.length(),inputString.length()); return properties.getProperty(key)+" "+value; } } return inputString; } /** * 获取中文全拼 * * @param name 需要转换的中文 * @return 全拼结果 **/ public static String getFullPinyin(String name) { // 创建格式化对象 HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat(); //设置大小写格式 outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); //设置声调格式 outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 放置输入结果 StringBuilder result = new StringBuilder(); // 字符数组 char[] charArray = name.toCharArray(); // 遍历字符 for (char c : charArray) { // 中文会被变成全拼,非中文会被直接拼接在结果字符串中 if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { String[] pinyinArray = new String[0]; try { pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat); } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { badHanyuPinyinOutputFormatCombination.printStackTrace(); } if (pinyinArray != null) { result.append(pinyinArray[0]); } } else { result.append(c); } } return result.toString(); } /** * 获取中文首字母 * * @param name 需要转换的中文 * @return 首字母结果 **/ public static String getPinyinInitial(String name) { // 创建格式化对象 HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat(); // 设置大小写格式 outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 设置声调格式 outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 放置输入结果 StringBuilder result = new StringBuilder(); // 字符数组 char[] charArray = name.toCharArray(); // 遍历字符 for (char c : charArray) { // 中文会被变成拼音首字母,非中文会被直接拼接在结果字符串中 if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { String[] pinyinArray = new String[0]; try { pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, outputFormat); } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { badHanyuPinyinOutputFormatCombination.printStackTrace(); } if (pinyinArray != null) { result.append(pinyinArray[0].charAt(0)); } } else { result.append(c); } } return result.toString(); } }
resources/pinyin.properties
区=OU 缪=MIAO 晟=CHENG 乐=YUE 员=YUN 贠=YUN 黑=HE 重=CHONG 仇=QIU 秘=BI 冼=XIAN 解=XIE 折=SHE 单=SHAN 朴=PIAO 翟=ZHA 查=ZHA 盖=GE 万俟=MO QI 尉迟=YU CHI
分类:
JavaSE
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理