网站首页 > java教程 正文
很多时候我们都会需要把汉字转化成拼音,方便我们使用。举个栗子:登录场景,客户提供的是一个中文名字,要做成登录,可是用中文名字来登录总是不太好,而且很容易造成乱码的情况出现。所以我们需要把中文登录名转成英文登录名。比如:“李四”需要装成“lisi”。
一、导入相关的依赖包
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
二、实现相关的转化工具类
public class Hanyu {
private HanyuPinyinOutputFormat format = null;
private String[] pinyin;
public Hanyu() {
format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pinyin = null;
}
/**
* 将汉字转成拼音
* <P>
* 取首字母或全拼
*
* @param hanzi 汉字字符串
* @param isFull 是否全拼 true:表示全拼 false表示:首字母
*
* @return 拼音
*/
private static String convertHanzi2Pinyin(String hanzi,boolean isFull){
/***
* ^[\u2E80-\u9FFF]+$ 匹配所有东亚区的语言
* ^[\u4E00-\u9FFF]+$ 匹配简体和繁体
* ^[\u4E00-\u9FA5]+$ 匹配简体
*/
String regExp="^[\u4E00-\u9FFF]+#34;;
StringBuffer sb=new StringBuffer();
if(hanzi==null||"".equals(hanzi.trim())){
return "";
}
String pinyin="";
for(int i=0;i<hanzi.length();i++){
char unit=hanzi.charAt(i);
//是汉字,则转拼音
if(match(String.valueOf(unit),regExp)){
pinyin=convertSingleHanzi2Pinyin(unit);
if(isFull){
sb.append(pinyin);
}
else{
sb.append(pinyin.charAt(0));
}
}else{
sb.append(unit);
}
}
return sb.toString();
}
/**
* 将单个汉字转成拼音
*
* @param hanzi 汉字字符
*
* @return 拼音
*/
private static String convertSingleHanzi2Pinyin(char hanzi){
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String[] res;
StringBuffer sb=new StringBuffer();
try {
res = PinyinHelper.toHanyuPinyinStringArray(hanzi,outputFormat);
sb.append(res[0]);//对于多音字,只用第一个拼音
} catch (Exception e) {
e.printStackTrace();
return "";
}
return sb.toString();
}
/***
* 匹配
* <P>
* 根据字符和正则表达式进行匹配
*
* @param str 源字符串
* @param regex 正则表达式
*
* @return true:匹配成功 false:匹配失败
*/
private static boolean match(String str,String regex){
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(str);
return matcher.find();
}
//转换单个字符
public String getCharacterPinYin(char c) {
try {
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
} catch(BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
// 如果c不是汉字,toHanyuPinyinStringArray会返回null
if(pinyin == null) return null;
// 只取一个发音,如果是多音字,仅取第一个发音
return pinyin[0];
}
//转换一个字符串
public String getStringPinYin(String str) {
StringBuilder sb = new StringBuilder();
String tempPinyin = null;
for(int i = 0; i < str.length(); ++i) {
tempPinyin =getCharacterPinYin(str.charAt(i));
if(tempPinyin == null) {
// 如果str.charAt(i)非汉字,则保持原样
sb.append(str.charAt(i));
} else {
sb.append(tempPinyin);
}
}
return sb.toString();
}
/**
* 获取汉字首字母或全拼小写字母
*
* @param chinese 汉字
* @param isFull 是否全拼 true:表示全拼 false表示:首字母
*
* @return 全拼或者首字母小写字符窜
*/
public static String getLowerCase(String chinese,boolean isFull){
return convertHanzi2Pinyin(chinese,isFull).toLowerCase();
}
}
猜你喜欢
- 2024-10-03 Java 17 使用 Lambda(java类的定义和使用)
- 2024-10-03 调用百度API,文字转语音(百度文字转语音接口)
- 2024-10-03 jvm,jre和jdk的区别和联系(jdk、jre和jvm的区别与联系)
- 2024-10-03 JAVA快速入门——基本结构、基本数据类型
- 2024-10-03 我可能学了一个假“尴尬”,读“jian jie”也可以!
- 2024-10-03 零基础学Java编程 回顾 下java入门代码,写程序真的很简单。
- 2024-10-03 汉字转拼音Pinyin4j的基本用法(二)
- 2024-10-03 vue如何将文字转化为拼音(vue的字幕怎么改变位置)
- 2024-10-03 《Java拼音首字母搜索内容功能详解》值得收藏
- 2024-10-03 100个Java工具类之18:汉字转拼音工具类
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)