天天看点

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

pinyin4j项目  官网地址 http://pinyin4j.sourceforge.net/

我们先把资源下载下来,连同源码和jar包一起放入工程。如下图:

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

接下来在demo包下,我们写一个测试类,简单使用pinyin4j对中文字符进行自然排序

新建一个ConvertTest.java

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

输出结果为:

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

可以看到最终的输出顺序已经是按照自然顺序排序后的结果了。

简单说一下步骤:

1.我们先将字符串序列转换成 单个字符key, 首字母value  的map形式,

如 {个=g, 徒=t, 我=w, 出=c, 叛=p, 了=l, 中=z, 一=y, 间=j, 们=m}。

2. 然后针对map中的value进行排序,并返回排序过后的key值。

(PS:当然这里也可以对key值进行排序,但是最好还是针对value。

因为我们这里截取的是首字母,并不是整个拼音音节。)

代码缺点:

1.只是针对中文字符的第一个拼音进行排序,但是汉语中存在多音字。

2.只是针对字符的首字母进行排序,并不是整个拼音字节,并不严谨,适合粗略排序的场景。

下面简单分析一下,pinyin4j的转换流程。

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

如上图,其中核心的类就是PinyinHelper。它可以转换许多类型的拼音,这里我们只看汉语拼音,其他的与之类似。

追踪代码 PinyinHelper.toHanyuPinyinStringArray

按ctrl + 鼠标左键。

继续跟踪代码

调用ChineseToPinyinResource示例的getHanyuPinyinStringArray方法

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

关键的方法getHanyuPinyinRecordFromChar

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)
浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

就是如下图的资源:

浅析pinyin4j源码 简单利用pinyin4j对中文字符进行自然排序(转)

<a href="http://www.cnblogs.com/sphere/p/4738888.html">http://www.cnblogs.com/sphere/p/4738888.html</a>