java 中汉字转拼音

需要引入的jar

<!-- pinyin --><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>

实现工具类

package com.julong.util;import java.util.regex.Pattern;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;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;/*** 中文转拼音工具类* @author julong* @date 2023年11月22日 上午11:20:30* @desc */
public class PinyinUtils {//日志private static final Logger logger = LoggerFactory.getLogger(PinyinUtils.class);/*** ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言* ^[\u4E00-\u9FFF]+$ 匹配简体和繁体* ^[\u4E00-\u9FA5]+$ 匹配简体*/public final static String REGEX="^[\u4E00-\u9FFF]+$";//设置格式public static HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();;public PinyinUtils(){}/*** 汉子转拼音 * @param data 汉子转拼音 * @return han zi huan pin yin* @author julong* @date 2023年11月22日 上午11:21:50* @desc*/public static String convertPinyin(String data){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{}",data);if(StringUtils.isBlank(data)){return "";}outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);String newData = "";//转为 charchar[] chars = data.toCharArray();try {//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c,outputFormat);newData = newData + a[0] +" ";}else{newData = newData + c + " ";}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO: handle exceptionlogger.error("【汉子转拼音工具】-转换拼音出现问题:{}",e);return data;}return newData;}/*** 汉子转拼音 * @param data 汉子转拼音 * @param caseType <code>HanyuPinyinCaseType</code>* @return <p>小写:han zi huan pin yin</p><p>大写:HAN ZI HUAN PIN YIN</p>* @author julong* @date 2023年11月22日 上午11:25:30* @desc*/public static String convertPinyin(String data,HanyuPinyinCaseType caseType){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{},caseType:{}",data,caseType.getName());if(StringUtils.isBlank(data)){return "";}outputFormat.setCaseType(caseType);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);String newData = "";//转为 charchar[] chars = data.toCharArray();try {//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c,outputFormat);newData = newData + a[0] +" ";}else{String str = String.valueOf(c);if(caseType.getName().equals(HanyuPinyinCaseType.UPPERCASE.getName())){str = str.toUpperCase();}newData = newData + str + " ";}}} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO: handle exceptionlogger.error("【汉子转拼音工具】-转换拼音出现问题:{}",e);return data;}return newData;}/*** 汉子转拼音首字母* @param data* @return* @author julong* @date 2023年11月22日 上午11:30:28* @desc*/public static String convertPinyinInitials(String data){logger.debug("【汉子转拼音工具】-转换拼音输入参数-data:{}",data);if(StringUtils.isBlank(data)){return "";}String newData = "";//转为 charchar[] chars = data.toCharArray();//判断是否为汉子for (char c : chars) {if(Pattern.matches(REGEX,String.valueOf(c))){//转码String[] a = PinyinHelper.toHanyuPinyinStringArray(c);newData = newData + a[0].charAt(0);}else{//不是汉子newData = newData + c;}}return newData;}public static void main(String[] args) {// TODO Auto-generated method stubString zhongwen = "中文转拼音,pin yin";System.out.println(convertPinyinInitials(zhongwen).toUpperCase());System.out.println(convertPinyin(zhongwen));System.out.println(convertPinyin(zhongwen,HanyuPinyinCaseType.LOWERCASE));System.out.println(convertPinyin(zhongwen,HanyuPinyinCaseType.UPPERCASE));}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程语言发展史:高级语言的兴起

一、高级语言的定义 高级语言是相对于汇编语言而言的&#xff0c;它是一种更加抽象、更加易于理解和使用的计算机编程语言。高级语言的特点是语法简单、易于学习、易于使用、可读性强、可移植性好等。高级语言的出现极大地提高了程序员的工作效率&#xff0c;同时也使得计算机…

Qt connect()方法Qt::ConnectionType

connect() Qt&#xff0c;绑定信号和槽原型&#xff1a; static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType Qt::AutoConnection);static QMetaObject::Connection conn…

JSP:Javabean

起初&#xff0c;JavaBean的目的是为了将可以重复使用的代码进行打包&#xff0c;在传统的应用中&#xff0c;JavaBean主要用于实现一些可视化界面&#xff0c;如一个窗体、按钮、文本框等&#xff0c;这样的JavaBean称之可视化的JavaBean。 随着技术的不断发展与项目的需求&am…

防火墙部署模式 -- 镜像流量(旁路模式)

镜像流量&#xff08;旁路模式&#xff09; 如图&#xff0c;与单臂路由模式不同&#xff0c;旁路模式中&#xff0c;PC的流量不会流经防火墙&#xff0c;就算防火墙宕机也不会影他们之间的数据传输。 镜像的原理是交换机把被镜像端口的流量复制一份&#xff0c;发到监听端口&…

寻找二叉树最近公共祖先

二叉树为BST LCR 193. 二叉搜索树的最近公共祖先 1.1 递归 利用BST的性质 p root 或者 q root ,显然根为公共祖先p < root < q 或者 p > root > q,显然p&#xff0c;q分别位于root的一颗子树上&#xff0c;故根为公共祖先max{p,q} < root ,显然 p 和q 均在…

基于单片机声光控智能路灯系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机声光控智能路灯系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的声光控智能路灯系统是一种利用单片机技术实现智能控制的路灯系统。它通过感知环境音量和光照强度…

Axios 请求响应结果的结构

发送请求 this.$axios.get(https://apis.jxcxin.cn/api/title?urlhttps://apis.jxcxin.cn/,{params: {id: 10}}).then(res > {console.log(res)})输出返回结果 confing 请求时的配置对象&#xff0c;如果请求的url&#xff0c;请求的方法&#xff0c;请求的参数&#xff0c…

深入理解Java注解的实现原理以及前世今生

深入理解Java注解的实现原理以及前世今生 小雪初寒&#xff0c;请添衣&#xff0c;冬棋如意&#xff0c;待良人&#xff0c;望归期。 1.Java注解的前世今生 Java注解是一种元数据标记&#xff0c;它提供了一种在Java代码中添加元数据&#xff08;注释&#xff09;的方式。注解…

Linux文件

目录 一、基本概念 二、研究进程和被打开文件的关系 &#xff08;一&#xff09;w方式 &#xff08;二&#xff09;a方式 三、认识系统接口&#xff0c;操作文件 &#xff08;一&#xff09;认识文件描述符 &#xff08;二&#xff09;举例 &#xff08;三&#xff09;…

2023年中国油墨树脂主要环节、产量及市场规模分析[图]

油墨树脂是指用于油墨制造中的一种高分子材料&#xff0c;主要用于改善油墨的粘性、流动性、光泽度和耐磨性等性能。其主要成分为合成树脂&#xff0c;如聚酯、聚酰胺、聚丙烯酸酯等。油墨树脂在油墨制造中的应用非常广泛&#xff0c;可以用于各种类型的油墨&#xff0c;包括印…

github访问不了问题

git clone github上的项目的时候&#xff0c;不是访问不了&#xff0c;就是克隆过程被中断了 最近找到一个代理&#xff0c;从代理那里clone而不是github上 GitHub代理 – 初果编程

python BDD 的相关概念

在Python 语言中进行BDD的规格和测试文件的编写的时候&#xff0c;常常会遇到下面的概念&#xff1a; Fixture : 测试设施。设定测试环境的预设状态或值的机制。Background&#xff1a; 背景。所有场景的公共部分。Scenario&#xff1a; 场景。Given &#xff1a; 前置条件Whe…

centos7 安装node.js,不用wget也不用解压文件

更新系统&#xff1a;首先&#xff0c;更新系统的软件包列表和已安装的软件包。在终端中以root用户或具有sudo权限的用户身份运行以下命令&#xff1a; sudo yum update添加Node.js源&#xff1a;CentOS 7默认的软件仓库中可能不包含最新的Node.js版本。因此&#xff0c;我们需…

[leetcode 数位运算] 2939. 最大异或乘积 M

给你三个整数 a &#xff0c;b 和 n &#xff0c;请你返回 (a XOR x) * (b XOR x) 的 最大值 且 x 需要满足 0 < x < 2n。 由于答案可能会很大&#xff0c;返回它对 109 7 取余 后的结果。 注意&#xff0c;XOR 是按位异或操作。 示例 1&#xff1a; 输入&#xff1…

git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法【Git学习三】

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要…

vue2 识别页面参数中的html

在Vue 2中&#xff0c;你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例&#xff0c;演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容&#xff1a; <template><div v-html&…

C语言计算一个数的 n 次方

1、要求 计算一个数的 n 次方&#xff0c;例如: 2 3&#xff0c;其中 2 为基数&#xff0c;3 为指数。 2、使用for循环 #include <stdio.h> int main(){int i,j,k,l1;printf("请输入基数和指数&#xff1a;");scanf("%d %d",&i,&j);for(k…

双流网络论文精读笔记

精读视频&#xff1a;双流网络论文逐段精读【论文精读】_哔哩哔哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 传统的神经网络难以学习到物体的运动信息&#xff0c;双流网络则通过光流将物体运动信息抽取出来再传递给神经网络 给模型提供…

Golang 中的良好代码与糟糕代码

最近&#xff0c;有人要求我详细解释在 Golang 中什么是好的代码和坏的代码。我觉得这个练习非常有趣。实际上&#xff0c;足够有趣以至于我写了一篇关于这个话题的文章。为了说明我的回答&#xff0c;我选择了我在空中交通管理&#xff08;ATM&#xff09;领域遇到的一个具体用…

linux部署jar 常见问题

1.java -jar xxx.jar no main manifest attribute, in xxx.jar 一.no main manifest attribute, in xxx.jar 在pom.xml文件中加入&#xff1a; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifac…