碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了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. objc与鸭子对象(上)

    这是<objc与鸭子对象>的上半部分,<objc与鸭子对象(下)>中介绍了鸭子类型的进阶用法.依赖注入以及demo. 我是前言 鸭子类型(Duck Type)即:“当看到一只鸟 ...

  2. Android--将实体类转化成Json和Map的基类

    package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...

  3. go语言练习:指针

    指针是一个变量,存储的是另一个变量的地址 package main import "fmt" func main() { var a string = "hello&qu ...

  4. LeetCode题解之Swap Nodes in Pairs

    1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...

  5. aix rootvg镜像

    就一般生产系统而已,操作系统层面都要进行备份,而最常见的操作系统备份方式之一就是做镜像(mirror),而实践过程中,往往是把rootvg这个卷组做镜像操作.查看rootvg是否已经进行镜像方法: 1 ...

  6. python常用模块之subprocess

    python常用模块之subprocess python2有个模块commands,执行命令的模块,在python3中已经废弃,使用subprocess模块来替代commands. 介绍一下:comm ...

  7. MyISAM和InnoDB的主要区别和应用场景

    主要区别: 1).MyISAM是非事务安全型的,而InnoDB是事务安全型的. 2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定. 3).MyISAM支持全文类型索引,而InnoDB不支持 ...

  8. innodb_locks_unsafe_for_binlog分析

    mysql数据库中默认的隔离级别为repeat-read. innodb默认使用了next-gap算法,这种算法结合了index-row锁和gap锁.正因为这样的锁算法,innodb在可重复读这样的默 ...

  9. UML学生成绩管理系统需求分析

    学生成绩管理系统工作室高校教育工作的一项重要内容.教务管理工作是指学校管理人员按照一定的教育方针,运用先进的管理手段,组织.协调.指挥并指导各用户活动,一边高效率.高质量地完成各项教学任务,完成国家所 ...

  10. 经典Paxos算法笔记

    介绍 Paxos算法是一个高容错性的分布式一致性算法.去年学习过Paxos算法,一直没将整理到博客.现在将经典Paxos算法相关内容整理到博客上. 经典Paxos算法本身也并不是太难理解,Lampor ...