內容轉載自: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.nonecasehtml
添加依賴:web
<!-- 漢字轉爲拼音 --> <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency>
工具類實現:apache
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