Java通过pinyin4j实现汉字转拼音详解编程语言

   碰到个需求,需要按用户名字的首字母来排序。这就需要获取汉字对应的拼音了,突然就想起了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;所以工具类写起来比较简单。
   
存在的问题: 多音字没处理好,只取了该字的第一个读音
    

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15519.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论