Android 汉字拼音生成

jar包

jar包下载链接:https://gitee.com/study_38/status-bar-lib-s/blob/master/pinyin4j-2.5.0.jar
将jar包放在app下的libs中,右键Add As Library 添加依赖。

主要的类及方法

PinyinHelper 提供了汉字转拼音的主要方法

HanyuPinyinOutputFormat 定义如何输出拼音,

HanyuPinyinCaseType 提供了拼音输出的样式
- LOWERCASE:输出小写
- UPPERCASE:输出大写

HanyuPinyinToneType 输出音标的设置
- WITH_TONE_MARK:直接用音标符(必须设置WITH_U_UNICODE,否则会抛出异常),
- WITH_TONE_NUMBER:1-4数字表示音标,
- WITHOUT_TONE:没有音标

HanyuPinyinVCharType 需要处理特殊音标ü时设置
- WITH_V:用v表示ü
- WITH_U_AND_COLON:用"u:"表示ü
- WITH_U_UNICODE:直接用ü

HanziToPinyinUtil

可以根据以上配置,结合自己的实际需求,自行配置一下

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;

public class HanziToPinyinUtil {

    /**
     *
     * @param str 汉字字符串
     * @param separator 拼音分隔符
     * @return 拼音String
     */
    public static String hanziToPinyin(String str, String separator) {
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        //
        format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
        format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        char[] chars = str.toCharArray();
        StringBuffer sb = new StringBuffer();
        for (char mChar : chars) {
            try {
                String hanziString = Character.toString(mChar);
                //得到单个汉字
                if(hanziString.matches("[\\u4e00-\\u9fa5]")){
                    //判断是否是汉字
                    String[] cStrFormatHY = PinyinHelper.toHanyuPinyinStringArray(mChar, format);

                    //得到此汉字的所有读音,如果是多音字(例如 “中”),其结果就是['zhōng','zhòng']
                    String oneHanZiPinYin = cStrFormatHY[0];//直接取一个拼音为汉字的拼音,例如zhōng,此处如果有需要,自己改一下就行
                    sb.append(oneHanZiPinYin);

                } else {
                    //不是汉字,原样输出
                    sb.append(hanziString);
                }
                //输出分隔符
                sb.append(separator);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

测试

String s1 = "世上无难事,只怕有心人。 驴子";
Log.d(TAG, "汉字 = " + s1);
log:汉字 = 世上无难事,只怕有心人。驴子

String pinyin = HanziToPinyinUtil.hanziToPinyin(s1, " ");
Log.d(TAG, "拼音 = " + pinyin);
log:拼音 = shì shàng wú nán shì , zhĭ pà yŏu xīn rén 。lǘ zi 

验证可行!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容