吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1894|回复: 30
收起左侧

[Java 原创] Java 获取汉字的拼音或汉字首字母

  [复制链接]
pengruibin 发表于 2023-7-31 08:58
本帖最后由 pengruibin 于 2023-7-31 09:07 编辑

项目中有需要将输入的汉字转化为拼音和提取每个汉字首字母的功能,记录分享一下

1、引入pinyin4j的maven依赖
[XML] 纯文本查看 复制代码
<dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
</dependency>


2、编写一个拼音处理的工具类
[Java] 纯文本查看 复制代码
package com.example.mydemo.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
 * 拼音工具类
 */
public class PinYinUtil {

    /**
     * 获取汉字串拼音,英文字符不变
     * @param chinese 汉字串
     * @return 汉语拼音
     */
    public static String getFullSpell(String chinese) {
        StringBuffer pybf = new StringBuffer();
        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                pybf.append(arr[i]);
            }
        }
        return pybf.toString();
    }
    
    /**
     * 获取汉字串拼音首字母,英文字符不变
     * @param chinese 汉字串
     * @return 汉语拼音首字母
     */
    public static String getFirstSpell(String chinese) {
        StringBuffer pybf = new StringBuffer();
        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
                    if (temp != null) {
                        pybf.append(temp[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                pybf.append(arr[i]);
            }
        }
        return pybf.toString().replaceAll("\\W", "").trim();
    }
    

    public static void main(String[] args) {
             System.out.println(getFullSpell("吃饭了吗")); 
             System.out.println(getFirstSpell("吃饭了吗")); 
     }
}


运行结果

运行结果

运行结果

免费评分

参与人数 4吾爱币 +2 热心值 +4 收起 理由
daAiXianZun9 + 1 我很赞同!
Family951 + 1 + 1 用心讨论,共获提升!
pentest686 + 1 + 1 谢谢@Thanks!
vaycore + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| pengruibin 发表于 2023-8-4 09:45
petroyf 发表于 2023-8-3 15:22
是从pinyin4j这个库里获取的常用汉字对应拼音吗?

是的,从pinyin4j依赖库处理的
TinaZerotwo 发表于 2023-7-31 10:49
String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用StringBuilder或StringBuffer
鹿鸣 发表于 2023-7-31 10:42
 楼主| pengruibin 发表于 2023-7-31 10:58
TinaZerotwo 发表于 2023-7-31 10:49
String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用St ...

额……    StringBuffer 用着呢
weiyanli 发表于 2023-7-31 11:37
有用的知识又增加了,感谢楼主分享
shuoyushanhai 发表于 2023-7-31 12:57

学习了,感谢分享啦
抱着丨枕头睡 发表于 2023-7-31 13:56
学习了,收藏一下
x1n 发表于 2023-7-31 14:34
很不错哈哈,学习了
y72463700 发表于 2023-7-31 21:00
学习了,感谢分享啦
yuaotian 发表于 2023-8-1 02:26
TinaZerotwo 发表于 2023-7-31 10:49
String不是很好啊,使用String对象进行拼接的话会产生大量的中间对象,造成资源浪费和性能损失。可以使用St ...

实际上jvm会自动优化,你放心,我看过字节码文件了,如果你用string进行拼接啥的,编译后自动转成sb的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-2 14:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表