内容转载自: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 }
输出结果:
ceshihanyuzifuchua
ce;shi;han;yu;zi;fu;chuan