1. 程式人生 > >【Java】積分手機端-中文轉拼音

【Java】積分手機端-中文轉拼音

目錄

前因

  這次小鹹兒因為專案的業務邏輯的需求,在一個新增頁面時,需要根據新增的中文名稱,生成一個拼音欄位值,存入到資料庫中。
  如圖,手機端新增頁面:
在這裡插入圖片描述

啟示

  實現的方式有兩種,一種是在前端頁面進行轉換,一種是在後端進行轉換,小鹹兒首先利用的方式是利用後端實現的,接下來還有前端實現的分享。

啟示

   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);
    }

  大家可以去嘗試使用一下,十分的方便,而且還可以根據不同的方法生成大寫或者帶聲調的拼音。