java将汉语转换为拼音工具类

内容转载自:https://blog.csdn.net/u012965373/article/details/82625950?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase


添加依赖:

<!-- 汉字转为拼音 -->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.0</version>
</dependency>

 工具类实现:

  1 import org.apache.logging.log4j.LogManager;
  2 import org.apache.logging.log4j.Logger;
  3 
  4 import net.sourceforge.pinyin4j.PinyinHelper;
  5 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  6 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  7 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  8 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
  9 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 10 
 11 /**
 12  * 汉字与拼音转换工具
 13  * @author Jinyy
 14  *
 15  */
 16 public class HanyuPinyinUtil {
 17     
 18     private static final Logger LOG = LogManager.getLogger(HanyuPinyinUtil.class);
 19 
 20     /**
 21      * 将文字转为汉语拼音
 22      * @param ChineseLanguage 要转成拼音的中文
 23      * @return 拼音小写
 24      */
 25     public String toHanyuPinyin(String ChineseLanguage){
 26         return toPinyinSplitWithSpecialSymbol(ChineseLanguage, "");
 27     }
 28     
 29     /**
 30      * 将汉语处理为拼音,并通过指定符号分隔
 31      * @param ChineseLanguage
 32      * @param symbol
 33      * @return
 34      */
 35     public String toPinyinSplitWithSpecialSymbol(String ChineseLanguage, String symbol){
 36         // 将汉字拆分为字符数组,通过逗号分隔
 37         char[] cl_chars = ChineseLanguage.trim().toCharArray();
 38         String hanyupinyin = "";
 39         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
 40         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 输出拼音全部小写
 41         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带声调
 42         defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ;
 43         try {
 44             for (int i=0; i<cl_chars.length; i++){
 45                 if (String.valueOf(cl_chars[i]).matches("[u4e00-u9fa5]+")){// 如果字符是中文,则将中文转为汉语拼音
 46                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0] + symbol;
 47                 } else {// 如果字符不是中文,则不转换
 48                     hanyupinyin += cl_chars[i];
 49                 }
 50             }
 51         } catch (BadHanyuPinyinOutputFormatCombination e) {
 52             LOG.info("字符不能转成汉语拼音");
 53         }
 54         return hanyupinyin.substring(0, hanyupinyin.length()-1);
 55     }
 56  
 57     /**
 58      * 转换拼音字符串中第一个为大写
 59      * @param ChineseLanguage
 60      * @return
 61      */
 62     public String getFirstLettersUp(String ChineseLanguage){
 63         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.UPPERCASE);
 64     }
 65  
 66     /**
 67      * 转换拼音字符串第一个为小写
 68      * @param ChineseLanguage
 69      * @return
 70      */
 71     public String getFirstLettersLo(String ChineseLanguage){
 72         return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.LOWERCASE);
 73     }
 74  
 75     /**
 76      * 获取第一个位置
 77      * @param ChineseLanguage
 78      * @param caseType
 79      * @return
 80      */
 81     public String getFirstLetters(String ChineseLanguage,HanyuPinyinCaseType caseType) {
 82         char[] cl_chars = ChineseLanguage.trim().toCharArray();
 83         String hanyupinyin = "";
 84         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
 85         defaultFormat.setCaseType(caseType);// 输出拼音全部大写
 86         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
 87         try {
 88             for (int i = 0; i < cl_chars.length; i++) {
 89                 String str = String.valueOf(cl_chars[i]);
 90                 if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
 91                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1);
 92                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
 93                     hanyupinyin += cl_chars[i];
 94                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
 95                     hanyupinyin += cl_chars[i];
 96                 } else {// 否则不转换
 97                     hanyupinyin += cl_chars[i];//如果是标点符号的话,带着
 98                 }
 99             }
100         } catch (BadHanyuPinyinOutputFormatCombination e) {
101             LOG.error("字符不能转成汉语拼音");
102         }
103         return hanyupinyin;
104     }
105  
106     /**
107      * 获取拼音字符串
108      * @param ChineseLanguage
109      * @return
110      */
111     public String getPinyinString(String ChineseLanguage){
112         char[] cl_chars = ChineseLanguage.trim().toCharArray();
113         String hanyupinyin = "";
114         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
115         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 输出拼音全部大写
116         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
117         try {
118             for (int i = 0; i < cl_chars.length; i++) {
119                 String str = String.valueOf(cl_chars[i]);
120                 if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
121                     hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(
122                             cl_chars[i], defaultFormat)[0];
123                 } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
124                     hanyupinyin += cl_chars[i];
125                 } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
126  
127                     hanyupinyin += cl_chars[i];
128                 } else {// 否则不转换
129                 }
130             }
131         } catch (BadHanyuPinyinOutputFormatCombination e) {
132             LOG.error("字符不能转成汉语拼音");
133         }
134         return hanyupinyin;
135     }
136     /**
137      * 取第一个汉字的第一个字符
138      * @Title: getFirstLetter
139      * @return String
140      * @throws
141      */
142     public String getFirstLetter(String ChineseLanguage){
143         char[] cl_chars = ChineseLanguage.trim().toCharArray();
144         String hanyupinyin = "";
145         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
146         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 输出拼音全部大写
147         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不带声调
148         try {
149             String str = String.valueOf(cl_chars[0]);
150             if (str.matches("[u4e00-u9fa5]+")) {// 如果字符是中文,则将中文转为汉语拼音,并取第一个字母
151                 hanyupinyin = PinyinHelper.toHanyuPinyinStringArray(
152                         cl_chars[0], defaultFormat)[0].substring(0, 1);;
153             } else if (str.matches("[0-9]+")) {// 如果字符是数字,取数字
154                 hanyupinyin += cl_chars[0];
155             } else if (str.matches("[a-zA-Z]+")) {// 如果字符是字母,取字母
156  
157                 hanyupinyin += cl_chars[0];
158             } else {// 否则不转换
159  
160             }
161         } catch (BadHanyuPinyinOutputFormatCombination e) {
162             LOG.error("字符不能转成汉语拼音");
163         }
164         return hanyupinyin;
165     }
166  
167     /**
168      * 测试程序入口
169      * @param args
170      */
171     public static void main(String[] args) {
172         HanyuPinyinUtil hanyuPinyinUtil = new HanyuPinyinUtil();
173         System.out.println(hanyuPinyinUtil.toHanyuPinyin("测试汉语字符串"));
174         
175         System.out.println(hanyuPinyinUtil.toPinyinSplitWithSpecialSymbol("测试汉语字符串", ";"));
176     }
177 }
View Code

输出结果:

ceshihanyuzifuchua
ce;shi;han;yu;zi;fu;chuan
原文地址:https://www.cnblogs.com/waiting-ying/p/12918175.html