【Java】积分手机端-中文转拼音

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csxypr/article/details/82912019

前因

  这次小咸儿因为项目的业务逻辑的需求,在一个添加页面时,需要根据添加的中文名称,生成一个拼音字段值,存入到数据库中。
  如图,手机端添加页面:
在这里插入图片描述

启示

  实现的方式有两种,一种是在前端页面进行转换,一种是在后端进行转换,小咸儿首先利用的方式是利用后端实现的,接下来还有前端实现的分享。

启示

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

  大家可以去尝试使用一下,十分的方便,而且还可以根据不同的方法生成大写或者带声调的拼音。

猜你喜欢

转载自blog.csdn.net/csxypr/article/details/82912019