利用 pinyin4j 把汉字转化为拼音

2024-03-18 13:32
文章标签 转化 汉字 拼音 pinyin4j

本文主要是介绍利用 pinyin4j 把汉字转化为拼音,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.     简单介绍

有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。但是怎样才能将“曹孟德”翻译成“caomengde”呢?很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<”曹”,”cao”>,<” 孟”,”meng”>,<” 德”,”de”>…但这样的做法,需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器是不行的,因为其<key,value>必须是一一对应的。

Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大:

  • 支持同一汉字有多个发音
  • 还支持拼音的格式化输出,比如第几声之类的,
  • 同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。

下面是其官方网址,其中提供了下载:

http://pinyin4j.sourceforge.net/

 

2.     基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

<pre name="code" class="java">String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('单');
for(int i = 0; i < pinyinArray.length; ++i)
{System.out.println(pinyinArray[i]);
}
 

就会输出:

dan1

chan2

shan4

这三种发音,后面的数字代表第几声。可以看到静态方法toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null。

3.    格式支持

Pinyin4j支持拼音输出的格式化,比如,“黄”可以输出为“huang”、“huang2”、“huáng”等等,下面的代码就似是输出“huáng”的示例:

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
设置声调格式:setToneType 

HanyuPinyinToneType.WITH_TONE_MARK      用声调符号表示,例如huáng

HanyuPinyinToneType.WITH_TONE_NUMBER  用数字表示声调,例如:huang2

HanyuPinyinToneType.WITHOUT_TONE           无声调表示,例如:huang


设置特殊拼音ü的显示格式:setVCharType

HanyuPinyinVCharType.WITH_U_UNICODE             以U表示该拼音, 

HanyuPinyinVCharType.WITH_U_AND_COLON       以U和一个冒号表示该拼音, 

HanyuPinyinVCharType.WITH_V                             以V表示该字符,


设置大小写格式:setCaseType

HanyuPinyinCaseType.LOWERCASE                   转换后以全小写方式输出

HanyuPinyinCaseType.UPPERCASE                    转换后以全大写方式输出

		String[] pinyinArray = null;try {pinyinArray = PinyinHelper.toHanyuPinyinStringArray('黄', format);} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}for (int i = 0; i < pinyinArray.length; ++i) {System.out.println(pinyinArray[i]);}


4.    实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出null。参考下面的示例代码:

<pre name="code" class="java">class HanYu {private HanyuPinyinOutputFormat format = null;private String[] pinyin;public HanYu(){format = new HanyuPinyinOutputFormat();format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);pinyin = null;}// 转换单个字符public String getCharacterPinYin(char c){try{pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);}catch (BadHanyuPinyinOutputFormatCombination e){e.printStackTrace();}// 如果c不是汉字,toHanyuPinyinStringArray会返回nullif (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();}
}
 

//测试代码
HanYu hanyu = new HanYu();
// 中英文混合的一段文字
String str = "少壮不努力老了学计算机,study hard hard,day day up";
String strPinyin = hanyu.getStringPinYin(str);
System.out.println(strPinyin);

 
打印结果: 

shăo zhuàng bù nŭ lì lăo le xué jì suàn jī ,study hard hard,day day up

这篇关于利用 pinyin4j 把汉字转化为拼音的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822498

相关文章

Java强制转化示例代码详解

《Java强制转化示例代码详解》:本文主要介绍Java编程语言中的类型转换,包括基本类型之间的强制类型转换和引用类型的强制类型转换,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录引入基本类型强制转换1.数字之间2.数字字符之间引入引用类型的强制转换总结引入在Java编程语言中,类型转换(无论

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

如何将二进制文件流转化为MockMultipartFile文件

《如何将二进制文件流转化为MockMultipartFile文件》文章主要介绍了如何使用Spring框架中的MockMultipartFile类来模拟文件上传,并处理上传逻辑,包括获取二进制文件流、创... 目录一、名词解释及业务解释1.具体业务流程2.转换对象解释1. MockMultipartFile2

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

5.1声道转化为左右声道

5.1声道转化为左右声道downmix http://szfzafa.blog.163.com/blog/static/11895416720120724729214/ 标题: Downmix 5.1ch to 2ch in AVS   最简单: function Dmix6Stereo(clip a) {  # 6 Channels L,R,C,LFE,SL,SR   f

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

通过C语言将文法转化为语言

最近在学习编译原理,在做一道题时,突然产生想法,想通过C语言将文法产生的语言表现出来。   题目如下:   给定文法:S::=aB|bA                     A::=aS|bAA|a                     B::=bS|aBB|b   该文法所产生的语言是什么?   程序如下,可以注意相关的程序注解 #include<stdio.h> #in

Oracle之用TO_CHAR函数将日期格式转化为不带前导零的月份和日

要求: 1、日期格式转化成字符串格式,月和日前面的0需要去掉,如日期2024-09-06需要转化成2024-9-6; 2、如果用截取拼接函数写法就会复杂,最好用TO_CHAR函数格式化实现。 正确写法: SELECT TO_CHAR(SYSDATE,'YYYY-fmMM-dd') AS DATE1 , -- 执行结果为 2024-9-6TO_CHAR(SYSDATE,'fmYYYY-MM-d