【Java】积分手机端-中文转拼音_手机兑换积分的拼音-程序员宅基地

技术标签: 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);
    }

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/csxypr/article/details/82912019

智能推荐

详解Spring Boot中@value的使用方式_springboot @value-程序员宅基地

文章浏览阅读3.4k次。如何在Spring Boot中使用`@value`获得配置文件中的内容_springboot @value

Ubuntu 下面安装gtk+-2.0_你的机器没有安装gtk的开发库,ubantu18.04-程序员宅基地

文章浏览阅读5.2k次。在Ubuntu下面安装飞鸽,iptux,编译源码的时候需要使用gtk+2.0,貌似大多数的图形界面软件都依赖于gtk+2.0,所以很有安装的必要好像安装的步骤挺复杂的,网上找到的文章,贴在这里留着以后备用。 apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具apt-get install gnome-core-devel #这将安装 lib_你的机器没有安装gtk的开发库,ubantu18.04

windows环境下JSP环境搭建:Apache2(1)-程序员宅基地

文章浏览阅读307次,点赞2次,收藏3次。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

Android:利用Java反射调用@hide的API_connectivitymanager 反射-程序员宅基地

文章浏览阅读1.6w次,点赞4次,收藏13次。设置使用3G数据功能:从源代码看到隐藏的API(ConnectivityManager.java): /** * Sets the persisted value for enabling/disabling Mobile data. * * @param enabled Whether the mobile data connection should_connectivitymanager 反射

[渝粤教育] 中国地质大学 互换性与测量技术 复习题 (2)_要求两孔同轴度φ0.3mm最大偏差是多少-程序员宅基地

文章浏览阅读941次。《互换性与测量技术》模拟题一.单选题1.优先选用基孔制的原因是().A.孔比轴难加工B.减少定尺寸孔用刀具量具的规格和数量C.减少孔和轴的公差带数量D.从工艺上讲应先加工孔后加工轴2.评定齿轮传递运动准确性的指标是().A.齿距累积总偏差B.单个齿距偏差C.齿廓总偏差D.螺旋线总偏差3.当几何公差框格的指引线箭头与尺寸线对齐时所表示的被测要素是().A.轮廓要素B.单一要素C.中心要素D.基准要素4.螺纹代号M20×2-7g6g表示的螺纹是().A.粗牙普通外螺纹B.粗_要求两孔同轴度φ0.3mm最大偏差是多少

Simulink模型转为TwinCAT3可以运行的ST程序_simulink导入到twincat-程序员宅基地

文章浏览阅读1k次。@Simulink PLC Coder :将Simulink模型转为TwunCAT程序1 先把simulink程序封装为一个子系统subsystem,标注好输入输出端口参考链接:https://ww2.mathworks.cn/help/plccoder/ug/plc-coder-general.html#bsemuq2-12 程序内不能包含任何连续状态的模块(比如微分,积分模块),而且有不支持的等simulink模块(比如Clock模块),因此需要用离散状态的功能块替代,或者编写MATLAB _simulink导入到twincat

随便推点

Mybatis学习日记(二)--mybatis-generator_org.mybatis.generator.ant.generatoranttask cannot -程序员宅基地

文章浏览阅读4.6k次。使用MyBatis-generator自动生成MyBatis映射代码下载mybatis-generator.1.3.1.jar 点击打开链接(包含英文api)还需要ant-1.6.5.jar主要说下如何使用配置文件生成,建立 config.xml

Linux~vim的三种模式下命令的基本使用和vim的额外功能(缓存、多文件编辑-程序员宅基地

文章浏览阅读671次,点赞19次,收藏6次。最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

UE4 服务器连接中版本比较_ue4 networkversionoverride-程序员宅基地

文章浏览阅读819次。需求一个工程使用源码版本运行,一个工程使用发布版本引擎运行,两个客户端在Editor模式下,可以通过JoinSession这种方式进行连接,正常会判断两份客户端版本不同不可以连接,可以通过绑定FNetworkVersion::IsNetworkCompatibleOverride 来实现自定义的版本比较,这里比较简单粗暴,具体详细的可以参考 https://zhuanlan.zhihu.com/p/158986763 实现具体方法(FNetworkVersion::IsNetworkCompatibleO_ue4 networkversionoverride

前后端数据传递之form-data_from-data类型的接口参数怎么传-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏3次。前后端接口数据联调有一种form-data形式,一般用来做文件上传,但是有时在登录的时候,也会用到这种格式传递数据,此时就需要通过借助FormData对象实现。_from-data类型的接口参数怎么传

Win10解决Disciples 2圣战群英传2卡顿问题_disciples 2如何窗口化运行-程序员宅基地

文章浏览阅读5.9k次。最近想翻点老游戏出来玩,比如圣战群英传2,但是卡得我mmp,一通搜索和捣鼓之后,终于发现了比较简单的解决问题的方法。1、首先确认电脑中是否有vcredist2010,至少08年以后的VC++库,没有就安。2、检查游戏根目录下有没有d3d9.dll,没有就下方传送门。https://dl.pconline.com.cn/download/91252.html如果还没能解决问题,那么:3、看看根目录有没有Disciple.ini,如果没有:3.1、看看根目录有没有一个骷髅头头像的Importer.e_disciples 2如何窗口化运行

数据链路层循环冗余(CRC)检验_链路层循环冗余校验码是检验哪一部分-程序员宅基地

文章浏览阅读5.5k次。数据链路层有许多协议,但有三个基本问题是相同的:封装成帧、透明传输和差错检验。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施,目前广泛使用的是循环冗余(CRC)检验的检错技术。 CRC检验原理: 在发送端,先把数据划分为组,假定每个组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,_链路层循环冗余校验码是检验哪一部分

推荐文章

热门文章

相关标签