中文取首字母,中文轉拼音
阿新 • • 發佈:2020-12-25
技術標籤:java
其中需要用到一個jar包:pinyin4j.jar
下載連結:http://central.maven.org/maven2/com/belerweb/pinyin4j/2.5.1/pinyin4j-2.5.1.jar
pom檔案:
工具類程式碼:
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
@Test
public void ChineseToSpell (){
System.out.println(“獲取漢子首字母:”+getFirstSpell(“桂林銀行”));
System.out.println(“漢子轉化為拼音:”+getFullSpell(“桂林A銀行”));
}
/** * 獲取漢字串拼音首字母,英文字元不變 * @param chinese 漢字串 * @return 漢語拼音首字母 */ public static String getFirstSpell(String chinese) { // 用StringBuffer(字串緩衝)來接收處理的資料 StringBuffer sb = new StringBuffer(); //字串轉換為字截陣列 char[] arr = chinese.toCharArray(); //建立轉換物件 HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); //轉換型別(大寫or小寫) defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); //定義中文聲調的輸出格式 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < arr.length; i++) { //判斷是否是漢子字元 if (arr[i] > 128) { try { // 提取漢字的首字母 String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat); if (temp != null) { sb.append(temp[0].charAt(0)); } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { // 如果不是漢字字元,直接拼接 sb.append(arr[i]); } } return sb.toString().replaceAll("\\W", "").trim(); } /** * 將字串中的中文轉化為拼音,其他字元不變 * @param inputString * @return 漢語拼音 */ public static String getPingYin(String inputString) { //建立轉換物件 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); //轉換型別(大寫or小寫) format.setCaseType(HanyuPinyinCaseType.LOWERCASE); //定義中文聲調的輸出格式 format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //定義字元的輸出格式 format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON); //轉換為位元組陣列 char[] input = inputString.trim().toCharArray(); // 用StringBuffer(字串緩衝)來接收處理的資料 StringBuffer output = new StringBuffer(); try { for (int i = 0; i < input.length; i++) { //判斷是否是一個漢子字元 if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format); output.append(temp[0]); } else { // 如果不是漢字字元,直接拼接 output.append(java.lang.Character.toString(input[i])); } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output.toString(); } /** * 獲取漢字串拼音,英文字元不變 【首字母大寫】 * @param chinese 漢字串 * @return 漢語拼音 */ public static String getFullSpell(String chinese) { // 用StringBuffer(字串緩衝)來接收處理的資料 StringBuffer sb = new StringBuffer(); //字串轉換位元組陣列 char[] arr = chinese.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); //轉換型別(大寫or小寫) defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); //定義中文聲調的輸出格式 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); //定義字元的輸出格式 defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON); for (int i = 0; i < arr.length; i++) { //判斷是否是漢子字元 if (arr[i] > 128) { try { sb.append(capitalize(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0])); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { // 如果不是漢字字元,直接拼接 sb.append(arr[i]); } } return sb.toString(); } /** * 首字母大寫 * @param str * @return */ public static String capitalize(String str) { char ch[]; ch = str.toCharArray(); if (ch[0] >= 'a' && ch[0] <= 'z') { ch[0] = (char) (ch[0] - 32); } String newString = new String(ch); return newString; }
測試結果:
以上程式碼參考以下博文;
具體可參考部落格:
https://blog.csdn.net/qq_40083897/article/details/85779162