java开源类库pinyin4j的使用
最近CMS系统为了增加查询的匹配率,需要增加拼音检索字段,在网上找到了pinyin4j的java开源类库,提供中文转汉语拼音(并且支持多音字), 呵呵,看了看他的demo,决定就用它了,因为我在实际使用的时候,需要考虑多音字的不同排列组合,下面的代码就是支持多音字的.
pinyin4j官方网址:http://pinyin4j.sourceforge.net/
- import java.util.HashSet;
- import java.util.Set;
- 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 pinyin4j {
- /**
- * 字符串集合转换字符串(逗号分隔)
- * @author wyh
- * @param stringSet
- * @return
- */
- public static String makeStringByStringSet(Set<String> stringSet){
- StringBuilder str = new StringBuilder();
- int i=0;
- for(String s : stringSet){
- if(i == stringSet.size() - 1){
- str.append(s);
- }else{
- str.append(s + ",");
- }
- i++;
- }
- return str.toString().toLowerCase();
- }
- /**
- * 获取拼音集合
- * @author wyh
- * @param src
- * @return Set<String>
- */
- public static Set<String> getPinyin(String src){
- if(src!=null && !src.trim().equalsIgnoreCase("")){
- char[] srcChar ;
- srcChar=src.toCharArray();
- //汉语拼音格式输出类
- HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();
- //输出设置,大小写,音标方式等
- hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
- hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE)
- hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
- String[][] temp = new String[src.length()][];
- for(int i=0;i<srcChar.length;i++){
- char c = srcChar[i];
- //是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z)
- if(String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")){
- try{
- temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat);
- }catch(BadHanyuPinyinOutputFormatCombination e) {
- e.printStackTrace();
- }
- }else if(((int)c>=65 && (int)c<=90) || ((int)c>=97 && (int)c<=122)){
- temp[i] = new String[]{String.valueOf(srcChar[i])};
- }else{
- temp[i] = new String[]{""};
- }
- }
- String[] pingyinArray = Exchange(temp);
- Set<String> pinyinSet = new HashSet<String>();
- for(int i=0;i<pingyinArray.length;i++){
- pinyinSet.add(pingyinArray[i]);
- }
- return pinyinSet;
- }
- return null;
- }
- /**
- * 递归
- * @author wyh
- * @param strJaggedArray
- * @return
- */
- public static String[] Exchange(String[][] strJaggedArray){
- String[][] temp = DoExchange(strJaggedArray);
- return temp[0];
- }
- /**
- * 递归
- * @author wyh
- * @param strJaggedArray
- * @return
- */
- private static String[][] DoExchange(String[][] strJaggedArray){
- int len = strJaggedArray.length;
- if(len >= 2){
- int len1 = strJaggedArray[0].length;
- int len2 = strJaggedArray[1].length;
- int newlen = len1*len2;
- String[] temp = new String[newlen];
- int Index = 0;
- for(int i=0;i<len1;i++){
- for(int j=0;j<len2;j++){
- temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
- Index ++;
- }
- }
- String[][] newArray = new String[len-1][];
- for(int i=2;i<len;i++){
- newArray[i-1] = strJaggedArray[i];
- }
- newArray[0] = temp;
- return DoExchange(newArray);
- }else{
- return strJaggedArray;
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- String str = "单田芳";
- System.out.println(makeStringByStringSet(getPinyin(str)));
- }
- }
- 控制台输出:dantianfang,shantianfang,chantianfang
java开源类库pinyin4j的使用的更多相关文章
- 【转】java开源类库pinyin4j的使用
最近CMS系统为了增加查询的匹配率,需要增加拼音检索字段,在网上找到了pinyin4j的java开源类库,提供中文转汉语拼音(并且支持多音字), 呵呵,看了看他的demo,决定就用它了,因为我在实际使 ...
- Atitit java onvif 开源类库 getProfiles getStreamUri
Atitit java onvif 开源类库 getProfiles getStreamUri 1. ONVIF Java Library by Milgo1 1.1. https://github. ...
- Java 的 JSON 开源类库选择比较(zz)
在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April ...
- 浅谈 Java 主流开源类库解析 XML
在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一 ...
- 国人开源了一款小而全的 Java 工具类库,厉害啊!!
最近栈长看到了一款小而全的 Java 工具类库:Hutool,Github 已经接近 14K Star 了,想必一定很优秀,现在推荐给大家,很多轮子不要再造了! Hutool 是什么 Hutool 是 ...
- Java开源中文分词类库
IKAnalyzer IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本.最初,它是以开 ...
- 一些iOS高效开源类库
因为iOS SDK相对比较底层,所以开发者就得受累多做一些体力活.不过幸运的是,有很多第三方的类库可以用来简化很多不必要的工作.笔者整理了一下在本人学习过程中用到的一些比较有用Objective-C开 ...
- [转]C#常用开源类库收集
.net PDF 类库 PDFsharp PDFsharp是一款可以让.NET框架支持的任何语言很容易的创建PDF文件的类库. ASP.NET FO PDF FO PDF 是一款C#编写类似于ASP. ...
- C#常用开源类库
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
随机推荐
- !! A股历史平均市盈率走势图
http://value500.com/PE.asp 一. A股历史平均市盈率走势图 *数据来源:上海证券交易所 分享到: 354 - 上海A股 深圳A股更新时间 2017年6月7日 2017年6月7 ...
- js值类型和引用类型的区别
1:赋值 值类型的赋值:直接将存储的数据赋值一份进行赋值,两份数据在内存中是完全独立的. 引用类型赋值:引用类型的赋值的时候,是将变量中的存储的地址赋值一份单独存储,但是两个变量中修改其中一个对象,另 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON HomMat2dRotate2
zw版[转发·台湾nvp系列Delphi例程]HALCON HomMat2dRotate2 procedure TForm1.Button1Click(Sender: TObject);var op ...
- REST服务安全-双向认证
1. 创建服务器密钥,其密钥库为 d:/mykeys/server.ks,注意keypass和storepass保持一致,它们分别代表 密钥密码和密钥库密码,注意 CN=localhost 中,loc ...
- linux基础命令---touch
touch 将文件的访问时间和修改时间修改为当前时间.如果指定的文件不存在,那么将会创造空文件,除非指定-c或-h选项.文件参数字符串‘-‘被专门处理,并导致touch更改与标准输出相关联的文件的时间 ...
- 随意给一组数,找出满足一下条件的a[i],a[i]左边的数小于等于a[i],a[i]右边的数大于等于a[i]
使用一个额外数组记录每个数后面的最小值是多少,一个额外数组记录一个数前面的最大值是多少,当然,为了减少空间复杂度,可以使用一个数字记录一个数字前面最大值是多少.算法如下: public List< ...
- Linux下实现 OpenSSL 简单加密与解密字符串
场景 shell脚本中存在明文密码 客户要求禁止使用明文密码,密码做加密处理. 方案 在网上了解到了Linux OpenSSL加密解密工具 可以指定各种加密算法为字符,文件做加密处理. 加密的案例比较 ...
- SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
0x00 SNMP TRAP简介 SNMP(Simple Network Management Protocol) trap是一种很有用,但是也容易让人难以理解的协议. 虽然名字叫做简单网络管理协议, ...
- Python Web学习笔记之WebSocket 通信过程与实现
一.什么是 WebSocket ? WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输.但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现. 以前客户端想知道服务 ...
- HTML 和 JavaScript 实现飘花的效果
HTML 和 JavaScript 实现飘花的效果,也不算花,就是有悬浮物飘下来,和下雪似的. 也是不需要图片和其他的 js 脚本做辅助,其实已经全写在 HTML 文件中了. <html> ...