A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈同英 中级黑马   /  2015-11-28 00:17  /  781 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、Android系统的通讯录也实现了拼音搜索,所以我们可以偷个懒,直接拿Android系统中的实现类来实现这个功能。

sdk\sources\android-2.3.3-gingerbread-src\com\android\internal\util\HanziToPinyin.java

该类我们无法直接获取实例或者反射访问,不过我们可以直接把源码拷入自己的项目中,然后使用。

概览:

简单看一下,就提供了一个get(Sting)方法供使用。

使用方式:


[java] view plaincopy
public void testHanziToPinyin()  
    {  
        ArrayList<Token> list = HanziToPinyin.getInstance().get(  
        "单赵 钱 孙 李 周 吴 郑 王冯 陈 褚 卫 蒋 沈 韩 杨 朱");  
        for (Token token : list)  
        {  
            System.out.print(token.source + " , " + token.target + " , " + token.type);  
            System.out.println();  
        }  
    }  
输出结果:


简单解释一下:HanziToPinyin是一个单例,获得该类实例后,get方法传入一个字符串,然后会对每个字符串的每个字符进行解析,解析结果存入Token中,

token.source=源 ;token.target=结果,token.type=2(也就是  public static final int PINYIN = 2; 封装的常量)



2、使用Pinyin4j

首先去http://pinyin4j.sourceforge.net/   下载一个jar包。

主要的几个类:

PinyinHelper 调用方法的核心类

HanyuPinyinOutputFormat 输出格式,设置HanyuPinyinCaseType(大小写),HanyuPinyinToneType(声调的方式),HanyuPinyinVCharType(V的输出方式)

使用方式:

[java] view plaincopy
String str = "单赵钱孙李周吴郑王冯陈褚卫abc";  
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();  
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);  
        format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);  
        for(int i = 0 ; i < str.length() ; i++)  
        {  
            char c = str.charAt(i);  
              
            String[] vals = PinyinHelper.toHanyuPinyinStringArray(c, format);  
            System.out.print(Arrays.toString(vals));  
        }  

输出结果:对于非汉字输出的是返回null
[java] view plaincopy
[DAN1, CHAN2, SHAN4][ZHAO4][QIAN2][SUN1][LI3][ZHOU1][WU2][ZHENG4][WANG2, WANG4][FENG2, PING2][CHEN2][CHU3, ZHU3][WEI4]nullnullnull  

附上一张官网的图,关于各种格式组合的结果:

Some combinations of these three output formats are forbidden. For example, '吕'

LOWERCASE
Combination        WITH_U_AND_COLON        WITH_V        WITH_U_UNICODE
WITH_TONE_NUMBER        lu:3        lv3        lü3
WITHOUT_TONE        lu:        lv        lü
WITH_TONE_MARK        Exception        Exception        lǚ

UPPERCASE
Combination        WITH_U_AND_COLON        WITH_V        WITH_U_UNICODE
WITH_TONE_NUMBER        LU:3        LV3        LÜ3
WITHOUT_TONE        LU:        LV        LÜ
WITH_TONE_MARK        Exception        Exception        LǙ

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马