碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了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. AOP编程报错Xlint:invalidAbsoluteTypeName

    @Component@Aspectpublic class DingdingAspect { private Logger logger = LoggerFactory.getLogger(this. ...

  2. LeetCode题解之Remove Nth Node From End of List

    1.题目描述 2.问题分析 直接计算,操作. 3.代码 ListNode* removeNthFromEnd(ListNode* head, int n) { if (head == NULL) re ...

  3. SSM整合配置文件的主要内容

    web.xml: <servlet> <setvlet-name>springMVC</setvlet-name> <!-- 配置前端控制器 --> & ...

  4. Cordova 8 架构使用sqlite - 谢厂节的博客 - 博客频道 - CSDN.NET - Google Chrome

    Cordova 8 架构使用sqlite 标签: androidcordova 2015-07-16 16:41 4302人阅读 评论(0) 收藏 举报  分类: IONIC/Cordova(18)  ...

  5. Azure 虚拟机代理概述

    Azure 虚拟机代理(AM 代理)是受保护的轻型过程,用于管理 VM 与 Azure 结构控制器的交互. VM 代理有一个主要角色,目的是启用和执行 Azure 虚拟机扩展. VM 扩展可用于对虚拟 ...

  6. CSS| position定位和float浮动

    对基础知识再度做个巩固和梳理. 一.position定位 (一):position的属性 1.absolute:生成绝对定位的元素,相对于最近一级定位不是static的父元素来进行定位: 2.rela ...

  7. PowerShell下载文件

    $webRequest = [System.Net.HttpWebRequest]::Create("http://go.microsoft.com/fwlink/?LinkID=14915 ...

  8. Windows 常识大全【all】

    解决电脑卡顿问题 电脑常见技巧大全 电脑运行命令CMD集锦 开启Windows 7系统的“上帝模式” Win7下设置护眼的电脑豆沙绿界面 零基础如何组装电脑?装机之家手把手教您电脑组装教程图解 [Ex ...

  9. Volley源码分析(四)NetWork与ResponseDelivery工作原理

    这篇文章主要分析网络请求和结果交付的过程. NetWork工作原理 之前已经说到通过mNetWork.performRequest()方法来得到NetResponse,看一下该方法具体的执行流程,pe ...

  10. 2017-2018-2 20165318 实验四《Android程序设计》实验报告

    2017-2018-2 20165318 实验四<Android程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄  ...