碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了pinyin4j这个jar包,于是就开始写了个汉字转拼音的工具类。在此记录一下,方便后续查阅

一、Pom依赖

		<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
6
 
1
        <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
2
        <dependency>
3
            <groupId>com.belerweb</groupId> 
4
            <artifactId>pinyin4j</artifactId>
5
            <version>2.5.0</version>
6
        </dependency>

二、代码

        这个工具类,实现了获取汉字拼音和获取汉字首字母这2个方法
package com.zxy.timecard.utils;
import net.sourceforge.pinyin4j.PinyinHelper; /**
* 拼音工具类
* @author ZENG.XIAO.YAN
* @date 2018年5月9日
*
*/
public class PinYinUtils { /**
* 获取汉字首字母的方法。如: 张三 --> ZS
* 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
* @param hanzi 汉子字符串
* @return 大写汉子首字母; 如果都转换失败,那么返回null
*/
public static String getHanziInitials(String hanzi) {
String result = null;
if(null != hanzi && !"".equals(hanzi)) {
char[] charArray = hanzi.toCharArray();
StringBuffer sb = new StringBuffer();
for (char ch : charArray) {
// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
if(null != stringArray) {
sb.append(stringArray[0].charAt(0));
}
}
if(sb.length() > 0) {
result = sb.toString().toUpperCase();
}
}
return result;
} /**
* 获取汉字拼音的方法。如: 张三 --> zhangsan
* 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
* @param hanzi 汉子字符串
* @return 汉字拼音; 如果都转换失败,那么返回null
*/
public static String getHanziPinYin(String hanzi) {
String result = null;
if(null != hanzi && !"".equals(hanzi)) {
char[] charArray = hanzi.toCharArray();
StringBuffer sb = new StringBuffer();
for (char ch : charArray) {
// 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
if(null != stringArray) {
// 把第几声这个数字给去掉
sb.append(stringArray[0].replaceAll("\\d", ""));
}
}
if(sb.length() > 0) {
result = sb.toString();
}
}
return result;
} public static void main(String[] args) {
System.out.println(PinYinUtils.getHanziInitials("袁素芳"));
System.out.println(PinYinUtils.getHanziPinYin("袁素芳"));
}
}
x
 
1
package com.zxy.timecard.utils;
2
import net.sourceforge.pinyin4j.PinyinHelper;
3

4
/**
5
 * 拼音工具类
6
 * @author ZENG.XIAO.YAN
7
 * @date   2018年5月9日
8
 * 
9
 */
10
public class PinYinUtils {
11
    
12
    /**
13
     * 获取汉字首字母的方法。如: 张三 --> ZS
14
     * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
15
     * @param hanzi 汉子字符串
16
     * @return 大写汉子首字母; 如果都转换失败,那么返回null
17
     */
18
    public static String getHanziInitials(String hanzi) {
19
        String result = null;
20
        if(null != hanzi && !"".equals(hanzi)) {
21
            char[] charArray = hanzi.toCharArray();
22
            StringBuffer sb = new StringBuffer();
23
            for (char ch : charArray) {
24
                // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
25
                String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
26
                if(null != stringArray) {
27
                    sb.append(stringArray[0].charAt(0));
28
                }
29
            }
30
            if(sb.length() > 0) {
31
                result = sb.toString().toUpperCase();
32
            }
33
        } 
34
        return result;
35
    }
36
    
37
    
38
    /**
39
     * 获取汉字拼音的方法。如: 张三 --> zhangsan 
40
     * 说明:暂时解决不了多音字的问题,只能使用取多音字的第一个音的方案
41
     * @param hanzi 汉子字符串
42
     * @return 汉字拼音; 如果都转换失败,那么返回null
43
     */
44
    public static String getHanziPinYin(String hanzi) {
45
        String result = null;
46
        if(null != hanzi && !"".equals(hanzi)) {
47
            char[] charArray = hanzi.toCharArray();
48
            StringBuffer sb = new StringBuffer();
49
            for (char ch : charArray) {
50
                // 逐个汉字进行转换, 每个汉字返回值为一个String数组(因为有多音字)
51
                String[] stringArray = PinyinHelper.toHanyuPinyinStringArray(ch);
52
                if(null != stringArray) {
53
                    // 把第几声这个数字给去掉
54
                    sb.append(stringArray[0].replaceAll("\\d", ""));
55
                }
56
            }
57
            if(sb.length() > 0) {
58
                result = sb.toString();
59
            }
60
        } 
61
        return result;
62
    }
63
    
64
    public static void main(String[] args) {
65
        System.out.println(PinYinUtils.getHanziInitials("袁素芳"));
66
        System.out.println(PinYinUtils.getHanziPinYin("袁素芳"));
67
    }
68
}

三、小结

    pinyin4j这个jar里面的把功能都封装好了,只需要直接调用就ok;所以工具类写起来比较简单。
    存在的问题: 多音字没处理好,只取了该字的第一个读音

    

Java通过pinyin4j实现汉字转拼音的更多相关文章

  1. java字符操作获取汉字的拼音以及其它经常使用工具

    公司需求年年有,今年有点小特殊,哈哈. 忽然加了个需求,说要实现汉字转拼音查询. 在努力下写出来了,如今分享一下吧!.! /** * 汉字转拼音缩写 * * @param str * 要转换的汉字字符 ...

  2. java获取多个汉字的拼音首字母

    本文属于http://java.chinaitlab.com/base/803353.html原创!!! public class PinYin2Abbreviation { // 简体中文的编码范围 ...

  3. 使用pinyin4j实现汉字转拼音

    1. maven项目,请在pom.xml里边添加包依赖相关配置: <dependency> <groupId>net.sourceforge.pinyin4j</grou ...

  4. [转]Java汉字按照拼音排序

    最近项目上使用到汉字排序的问题,网上搜索了一下后普遍使用下面的方法比较. @Test public void test_sort_pinyin() { Collator cmp = Collator. ...

  5. JAVA实现汉字转换为拼音 pinyin4j/JPinyin

    在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代 ...

  6. java实现将汉字转为拼音

    有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测 ...

  7. java汉字转拼音以及得到首字母通用方法

    package oa.common.utils;   import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.piny ...

  8. 汉字转拼音的Java类库:JPinyin

    JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇 ...

  9. java 汉字转拼音

    先决条件: pinyin4j.jar(Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制.) 下载地址:http://pan.baidu.com/share/l ...

随机推荐

  1. Nginx的日志优化

    1.日志轮询切割: 这篇文章已经对日志轮询切割做个介绍:请点击这里 2.不记录不需要的日志 在实际的工作中,对于负载均衡器健康节点检查或某些特定文件的日志,一般不需要记录下来,因为统计PV是按照页面计 ...

  2. Nginx的防爬虫优化

    我们可以根据客户端的 user-agents 首部字段来阻止指定的爬虫爬取我们的网站: 虚拟主机配置如下:(红色标记为添加或者修改内容) [root@Nginx www_date]# cat bria ...

  3. LeetCode题解之Split Linked List in Parts

    1.题目描述 2.题目分析 主要是理解题意,将每个子链表应该分得的节点个数计算清楚.利用除数和余数的方法进行计算. 3.代码 vector<ListNode*> splitListToPa ...

  4. QT的setwindowflags的属性总结

    :setWindowFlags(Qt::CustomizeWindowHint);//设置窗口标题栏自定义 setWindowFlags(Qt::WindowMinimizeButtonHint);/ ...

  5. 50家硅谷IT公司技术博客

    分享一下 50 家硅谷优秀 IT 公司技术博客,从中可以了解企业文化,技术特色和设计语言,如果直接列出来很单调,加上点评,算吐槽版吧. 知名大厂   1. Facebook https://www.f ...

  6. 使用Vagrant和VirtualBox一步步地创建一个Base Box

    box集合  http://www.vagrantbox.es/ Vagrant和VirtualBox软件的安装步骤省略,去官网下载最新的版本然后下一步下一步地安装就行了,和正常的安装软件没有什么区别 ...

  7. Windows进程间的通信

    一.进程与进程通信   进程间通信(Interprocess Communication, IPC)是指不同的进程之间进行数据共享和数据交换. 二.进程间通信方式 1.  文件映射 注:文件映射是在多 ...

  8. PgSQL基础之 安装postgresql数据系统

    参考这位仁兄的文章,真的非常好:https://blog.csdn.net/jerry_sc/article/details/76408116#创建数据目录 后来我又自己写了一个shell脚本,来自动 ...

  9. gdb调试:

    1 简介      GDB(GNU Debugger)是GCC的调试工具.其功能强大,现描述如下:      GDB主要帮忙你完成下面四个方面的功能:      1.启动你的程序,可以按照你的自定义的 ...

  10. 打开Excel时提示“向程序发送命令时出现问题”

    Excel界面中点击“文件”,选择“选项”,在弹出的“Excel选项”对话框中依次点击“高级”-“常规”,然后取消勾选”忽略使用动态数据交换(DDE)的其他应用程序”: