Java 获取汉字串首字母并大写和获取汉字的全拼,英文字符不变

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

Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。 
主要的功能有: 
- 支持同一汉字有多个发音 
- 支持拼音的格式化输出,比如第几声之类的 
- 支持简体中文、繁体中文转换为拼音 

 

末尾有一个 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 chines
112      * @return
113      */
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 }

 

下载 pinyin4j-2.5.0.jar

 

posted @ 2017-10-17 14:38  走在一线的码农  阅读(10309)  评论(0编辑  收藏  举报