栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于汉字转拼音的Pinyin4j工具使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于汉字转拼音的Pinyin4j工具使用

关于汉字转拼音的Pinyin4j工具使用
  • 1 Pinyin4j的简介
  • 2 Pinyin4j的使用
        • 1 添加maven依赖
        • 2 添加汉字转拼音工具类

关于汉字转为拼音的相关实现,通常使用Pinyin4j框架,整理一下Pinyin4j的使用

官方文档:

http://pinyin4j.sourceforge.net/

1 Pinyin4j的简介

Pinyin4j 是一个流行的Java开源类库,支持中文字符和拼音之间的转换。拼音输出格式可以定制。

支持功能:

  • 支持简体中文和繁体中文字符
  • 支持转换到汉语拼音,通用拼音
  • 支持多音字,即可以获取一个中文字符的多种发音
  • 支持多种字符串输出格式

应用场景:

  • 用户输入汉字转拼音
  • 数据库中添加姓名的首字母存储

源代码分析:

 
2 Pinyin4j的使用 
1 添加maven依赖 
    
      com.belerweb
      pinyin4j
      2.5.1
    
2 添加汉字转拼音工具类
@Slf4j
public class PinYinUtils {


    public static void main(String[] args) {
        PinYinUtils pinYinUtils = new PinYinUtils();
        String str = "唐代诗人李白-libai";
        System.out.println(pinYinUtils.toHanyuPinyin(str));
        System.out.println(pinYinUtils.getFirstLetter(str));
    }
    
    
    public String toHanyuPinyin(String hanzi) {
        char[] chars = hanzi.trim().toCharArray();
        String hanyupinyin = "";

        //输出格式设置
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);

        
//        defaultFormat.setToneType(HanyuPinyinToneType.WITH_TONE_MARK); //  必须设置WITH_U_UNICODE,否则会抛出异常
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        
//        defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
        defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);

        // 中文的正则表达式
        String hanziRegex = "[\u4E00-\u9FA5]+";

        try {
            for (int i = 0; i < chars.length; i++) {
                // 判断为中文,则转换为汉语拼音
                if (String.valueOf(chars[i]).matches(hanziRegex)) {
                    hanyupinyin += PinyinHelper
                            .toHanyuPinyinStringArray(chars[i], defaultFormat)[0];
                } else {
                    // 不为中文,则不转换
                    hanyupinyin += chars[i];
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            log.error("字符不能转成汉语拼音");
        }

        return hanyupinyin;
    }
    
    public String getFirstLetter(String hanzi) {
        char[] chars = hanzi.trim().toCharArray();
        StringBuilder firstPinyin = new StringBuilder();

        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        // 拼音大写
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        // 不带声调
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        try {
            String str = String.valueOf(chars[0]);
            // 中文的正则表达式
            String hanziRegex = "[\u4E00-\u9FA5]+";
            // 数字表达式
            String numberRegex = "[0-9]+";
            // 字母表达式
            String charRegex = "[a-zA-Z]+";

            for (int i = 0, len = chars.length; i < len; i++) {
                // 判断为汉字,则转为拼音,并取第一个字母
                if (Character.toString(chars[i]).matches("[\u4E00-\u9FA5]+")) {
                    // 如果是多音字,只取第一个
                    String[] pys = PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat);
                    firstPinyin.append(pys[0].charAt(0));
                } else {
                    firstPinyin.append(chars[i]);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            log.error("字符不能转为汉语拼音");
        }

        return firstPinyin.toString();
    }
}    


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号