zoukankan      html  css  js  c++  java
  • 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>

    二、代码

            这个工具类,实现了获取汉字拼音和获取汉字首字母这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("袁素芳"));
    	}
    }

    三、小结

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

        
  • 相关阅读:
    Vue中使用WebSocket
    中断「interrupt」(IPI interrupt)
    ARM instruction misc
    ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器
    android logd 原理及实现
    [FTRACE] vmlinux __mcount_loc section
    如何计算eMMC大小
    get the emmc capacity in kernel
    uboot misc
    GPT分区表详解
  • 原文地址:https://www.cnblogs.com/zeng1994/p/9014206.html
Copyright © 2011-2022 走看看