【Java】【23】汉字转拼音

前言:

1,pinyin4J.jar包

2,常用方法:转为常见拼音——PinyinHelper.oHanyuPinyinStringArray(char ch)

3,HanyuPinyinOutputFormat :输出的格式

4,代码

正文:

1,jar包的maven地址为http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2.5.0

2, 常用方法

PinyinHelper.oHanyuPinyinStringArray(char ch, HanyuPinyinOutputFormat outputFormat)

将char(必须为汉字单字)转化为拼音,如果ch为非汉字,返回null。

输入:重 输出:[zhong4, chong2],说明重字有两个读音,拼音后面的1,2,3,4 代表的是读音。

其他诸如转为 注音符号拼音 的方法,请看我参考的第一篇博客,写得挺好的

3,HanyuPinyinOutputFormat :输出的格式

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

format.setCaseType(HanyuPinyinCaseType.UPPERCASE);

format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

(1)HanyuPinyinCaseType代表大小写

UPPERCASE:全部大写

LOWERCASE:全部小写

FIRSTUPPER:首字母大写

(2)HanyuPinyinToneType代表声调

.WITH_TONE_NUMBER:用数字表示声调,如:liu2

.WITHOUT_TONE:无声调,liu

.WITH_TONE_MARK:用声调符号表示,打不出来。。。可看第二篇参考博客

 4,代码

package com.lyz.pingyin;
 
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.exception.BadHanyuPinyinOutputFormatCombination;
 
 
/**
 * 汉字转化为拼音的工具类
 * @author liuyazhuang
 *
 */
public class PinyinTool {
    HanyuPinyinOutputFormat format = null;
    public static enum Type {
        UPPERCASE,              //全部大写
        LOWERCASE,              //全部小写
        FIRSTUPPER              //首字母大写
    }
 
    public PinyinTool(){
        format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    }
 
    public String toPinYin(String str) throws BadHanyuPinyinOutputFormatCombination{
        return toPinYin(str, "", Type.UPPERCASE);
    }
 
    //spera代表分割符号
    public String toPinYin(String str,String spera) throws BadHanyuPinyinOutputFormatCombination{
        return toPinYin(str, spera, Type.UPPERCASE);
    }
 
    /**
     * 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换
     * 如: 明天 转换成 MINGTIAN
     * @param str:要转化的汉字
     * @param spera:转化结果的分割符
     * @return
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public String toPinYin(String str, String spera, Type type) throws BadHanyuPinyinOutputFormatCombination {
        if(str == null || str.trim().length()==0)
            return "";
        if(type == Type.UPPERCASE)
            format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        else
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
 
        String py = "";
        String temp = "";
        String[] t;
        for(int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if((int)c <= 128)
                py += c;
            else{
                t = PinyinHelper.toHanyuPinyinStringArray(c, format);
                if(t == null)
                    py += c;
                else{
                    temp = t[0];
                    if(type == Type.FIRSTUPPER)
                        temp = t[0].toUpperCase().charAt(0)+temp.substring(1);
                    py += temp+(i==str.length()-1?"":spera);
                }
            }
        }
        return py.trim();
    }
}

参考博客:

1,Java之——汉字转换拼音(大小写) - 冰河的专栏 - CSDN博客
https://blog.csdn.net/l1028386804/article/details/55505397

2,pinyin4j的使用手册 - 百度文库

https://wenku.baidu.com/view/722351ef102de2bd9605881c.html

posted @ 2019-05-28 22:21  花生喂龙  阅读(365)  评论(0编辑  收藏  举报