博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 获取汉字串首字母并大写和获取汉字的全拼,英文字符不变
阅读量:4707 次
发布时间:2019-06-10

本文共 4994 字,大约阅读时间需要 16 分钟。

  在开发中我们难免会遇到需要提出汉字中的拼音的首字母、提出汉字的拼音,接着便介绍一个工具类 pinyin4j.jar,首先需要下载 jar 包。

Pinyin4j是一个功能强悍的汉语拼音工具包,是上的一个开源项目。 

主要的功能有: 
- 支持同一汉字有多个发音 
- 支持拼音的格式化输出,比如第几声之类的 
- 支持简体中文、繁体中文转换为拼音 

 

末尾有一个 cleanChar() 方法,目的是为了清除字符串中所有的特殊字符,避免字符的出现会中断拼音的输出导致报错,简而言之,清楚汉字和英文以外的所有字符(当然没有写完所有的字符,只是写了部分常用的,欢迎各位提出以更简洁的方法替换这些字符)

具体方法如下:

1 package com.jd.ddkdy.util;  2   3 import java.util.regex.Matcher;  4 import java.util.regex.Pattern;  5   6 import net.sourceforge.pinyin4j.PinyinHelper;  7 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;  8 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;  9 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 10 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; 11 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 12  13 /** 14  * 字符串转换为拼音工具类 15  *  16  * @projectName: PinyinDome 17  */ 18 public class PinyinUtils { 19  20     /** 21      * 获得汉语拼音首字母 22      * 23      * @param chines 24      *            汉字 25      * @return 26      */ 27     public static String getAlpha(String chines) { 28         chines = cleanChar(chines); 29         String pinyinName = ""; 30         char[] nameChar = chines.toCharArray(); 31         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 32         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); 33         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 34         for (int i = 0; i < nameChar.length; i++) { 35             if (nameChar[i] > 128) { 36                 try { 37                     pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0); 38                 } catch (BadHanyuPinyinOutputFormatCombination e) { 39                     e.printStackTrace(); 40                 } 41             } else { 42                 pinyinName += nameChar[i]; 43             } 44         } 45         return pinyinName; 46     } 47  48     /** 49      * 将字符串中的中文转化为拼音,英文字符不变 50      * 51      * @param inputString 52      *            汉字 53      * @return 54      */ 55     public static String getPingYin(String inputString) { 56         inputString = cleanChar(inputString); 57         HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); 58         format.setCaseType(HanyuPinyinCaseType.LOWERCASE); 59         format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 60         format.setVCharType(HanyuPinyinVCharType.WITH_V); 61         String output = ""; 62         if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) { 63             char[] input = inputString.trim().toCharArray(); 64             try { 65                 for (int i = 0; i < input.length; i++) { 66                     if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) { 67                         String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format); 68                         output += temp[0]; 69                     } else 70                         output += java.lang.Character.toString(input[i]); 71                 } 72             } catch (BadHanyuPinyinOutputFormatCombination e) { 73                 e.printStackTrace(); 74             } 75         } else { 76             return "*"; 77         } 78         return output; 79     } 80  81     /** 82      * 汉字转换位汉语拼音首字母,英文字符不变 83      * 84      * @param chines 85      *            汉字 86      * @return 拼音 87      */ 88     public static String converterToFirstSpell(String chines) { 89         chines = cleanChar(chines); 90         String pinyinName = ""; 91         char[] nameChar = chines.toCharArray(); 92         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 93         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); 94         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 95         for (int i = 0; i < nameChar.length; i++) { 96             if (nameChar[i] > 128) { 97                 try { 98                     pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0); 99                 } catch (BadHanyuPinyinOutputFormatCombination e) {100                     e.printStackTrace();101                 }102             } else {103                 pinyinName += nameChar[i];104             }105         }106         return pinyinName;107     }108 109     /**110      * 清理特殊字符以便得到111      * @param chines112      * @return113      */114     public static String cleanChar(String chines) {115         chines = chines.replaceAll("[\\p{Punct}\\p{Space}]+", ""); // 正则去掉所有字符操作116         // 正则表达式去掉所有中文的特殊符号117         String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}<>《》【】‘;:”“’。,、?]";118         Pattern pattern = Pattern.compile(regEx);119         Matcher matcher = pattern.matcher(chines);120         chines = matcher.replaceAll("").trim();121         return chines;122     }123 124 }

 

 

转载于:https://www.cnblogs.com/yjq520/p/7681537.html

你可能感兴趣的文章
最新版IntelliJ IDEA2019 破解教程(2019.08.07-情人节更新)
查看>>
C# 两个datatable中的数据快速比较返回交集或差集
查看>>
关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
查看>>
adb shell am 的用法
查看>>
iOS10 UI教程视图和子视图的可见性
查看>>
FindChildControl与FindComponent
查看>>
中国城市json
查看>>
android下载手动下载Android SDK
查看>>
C++学习:任意合法状态下汉诺塔的移动(原创)
查看>>
leetcode133 - Clone Graph - medium
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
Oauth支持的5类 grant_type 及说明
查看>>
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
netty接收大文件的方法
查看>>
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
Happy Number
查看>>