【Java】積分手機端-中文轉拼音
阿新 • • 發佈:2018-11-17
目錄
前因
這次小鹹兒因為專案的業務邏輯的需求,在一個新增頁面時,需要根據新增的中文名稱,生成一個拼音欄位值,存入到資料庫中。
如圖,手機端新增頁面:
啟示
實現的方式有兩種,一種是在前端頁面進行轉換,一種是在後端進行轉換,小鹹兒首先利用的方式是利用後端實現的,接下來還有前端實現的分享。
啟示
1. 下載jar包 ,首先要先下載一個jar包——pinyin4j.2.5.1.jar。因為小鹹兒使用的是maven專案,所以需要在pom.xml檔案中新增:
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
<scope>compile</scope>
</dependency>
2. 建立工具類 ,下載好後,需要自己新建一個工具類HanyuPinyin
3. 工具類程式碼 ,HanyuPinyin類中的程式碼:
package com.dmsdbj.cloud.tool.HanyuPinyin; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class HanyuPinyinHelper { /** * 將文字轉為漢語拼音 * @param ChineseLanguage 要轉成拼音的中文 */ public String toHanyuPinyin(String ChineseLanguage){ char[] cl_chars = ChineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 輸出拼音全部小寫 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不帶聲調 defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V) ; try { for (int i=0; i<cl_chars.length; i++){ if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")){// 如果字元是中文,則將中文轉為漢語拼音 hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0]; } else {// 如果字元不是中文,則不轉換 hanyupinyin += cl_chars[i]; } } } catch (BadHanyuPinyinOutputFormatCombination e) { System.out.println("字元不能轉成漢語拼音"); } return hanyupinyin; } public static String getFirstLettersUp(String ChineseLanguage){ return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.UPPERCASE); } public static String getFirstLettersLo(String ChineseLanguage){ return getFirstLetters(ChineseLanguage ,HanyuPinyinCaseType.LOWERCASE); } public static String getFirstLetters(String ChineseLanguage,HanyuPinyinCaseType caseType) { char[] cl_chars = ChineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(caseType);// 輸出拼音全部大寫 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不帶聲調 try { for (int i = 0; i < cl_chars.length; i++) { String str = String.valueOf(cl_chars[i]); if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字元是中文,則將中文轉為漢語拼音,並取第一個字母 hanyupinyin += PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1); } else if (str.matches("[0-9]+")) {// 如果字元是數字,取數字 hanyupinyin += cl_chars[i]; } else if (str.matches("[a-zA-Z]+")) {// 如果字元是字母,取字母 hanyupinyin += cl_chars[i]; } else {// 否則不轉換 hanyupinyin += cl_chars[i];//如果是標點符號的話,帶著 } } } catch (BadHanyuPinyinOutputFormatCombination e) { System.out.println("字元不能轉成漢語拼音"); } return hanyupinyin; } public static String getPinyinString(String ChineseLanguage){ char[] cl_chars = ChineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 輸出拼音全部大寫 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不帶聲調 try { for (int i = 0; i < cl_chars.length; i++) { String str = String.valueOf(cl_chars[i]); if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字元是中文,則將中文轉為漢語拼音,並取第一個字母 hanyupinyin += PinyinHelper.toHanyuPinyinStringArray( cl_chars[i], defaultFormat)[0]; } else if (str.matches("[0-9]+")) {// 如果字元是數字,取數字 hanyupinyin += cl_chars[i]; } else if (str.matches("[a-zA-Z]+")) {// 如果字元是字母,取字母 hanyupinyin += cl_chars[i]; } else {// 否則不轉換 } } } catch (BadHanyuPinyinOutputFormatCombination e) { System.out.println("字元不能轉成漢語拼音"); } return hanyupinyin; } /** * 取第一個漢字的第一個字元 * @Title: getFirstLetter * @Description: TODO * @return String * @throws **/ public static String getFirstLetter(String ChineseLanguage){ char[] cl_chars = ChineseLanguage.trim().toCharArray(); String hanyupinyin = ""; HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 輸出拼音全部大寫 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不帶聲調 try { String str = String.valueOf(cl_chars[0]); if (str.matches("[\u4e00-\u9fa5]+")) {// 如果字元是中文,則將中文轉為漢語拼音,並取第一個字母 hanyupinyin = PinyinHelper.toHanyuPinyinStringArray( cl_chars[0], defaultFormat)[0].substring(0, 1);; } else if (str.matches("[0-9]+")) {// 如果字元是數字,取數字 hanyupinyin += cl_chars[0]; } else if (str.matches("[a-zA-Z]+")) {// 如果字元是字母,取字母 hanyupinyin += cl_chars[0]; } else {// 否則不轉換 } } catch (BadHanyuPinyinOutputFormatCombination e) { System.out.println("字元不能轉成漢語拼音"); } return hanyupinyin; } }
後果
這時就可以直接使用這個工具類,可以在自己需要的方法中新增這個工具類的使用,如下:
@ApiOperation(value = "新增") @PostMapping(value = {"/create"}) public TypeKeyConfigEntity create(@RequestBody TypeKeyConfigEntity entity) { HanyuPinyinHelper hanyuPinyinHelper = new HanyuPinyinHelper(); String typeKey = entity.getName(); entity.setTypeKey(hanyuPinyinHelper.toHanyuPinyin(typeKey)); return typeKeyConfigService.insert(entity); }
大家可以去嘗試使用一下,十分的方便,而且還可以根據不同的方法生成大寫或者帶聲調的拼音。