pinyin4j 中文转拼音

 

pinyin4j的主页:http://pinyin4j.sourceforge.net/ 

pinyin4j是一个支持将中文转换到拼音的Java开源类库。 

 

A copy of http://sourceforge.net/projects/pinyin4j, then deploy it to maven central repository.

<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>

https://github.com/belerweb/pinyin4j

 

基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray('单');
for (String s : pinyinArray) {
    System.out.println(s);
    /*
     dan1
     chan2
     shan4
     */
}

 

 

格式支持

Pinyin4j支持拼音输出的格式化

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyinArray = null;
try {
    pinyinArray = PinyinHelper.toHanyuPinyinStringArray('单', format);
} catch (BadHanyuPinyinOutputFormatCombination e) {
    e.printStackTrace();
}
for (String s : pinyinArray) {
    System.out.println(s);
    /*
     dān
     chán
     shàn
     */
}

 

实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出空数组。参考下面的示例代码:

import net.sourceforge.pinyin4j.*;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class Chinese2PY {
    public static void main(String[] args) {
        Hanyu hanyu = new Hanyu();
        // 中英文混合的一段文字
        String str = "荆溪白石出,Hello 天寒红叶稀。Android 山路元无雨,What's up?   空翠湿人衣。";
        String strPinyin = hanyu.getStringPinYin(str);
        System.out.println(strPinyin);
    }
}

class Hanyu {
    private HanyuPinyinOutputFormat format = null;
    private String[] pinyin;

    public Hanyu() {
        format = new HanyuPinyinOutputFormat();
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        pinyin = null;
    }

    //转换单个字符
    public String getCharacterPinYin(char c) {
        try {
            pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }

        // 如果c不是汉字,toHanyuPinyinStringArray会返回空数组
        if (pinyin == null || pinyin.length == 0) return null;
        // 只取一个发音,如果是多音字,仅取第一个发音
        return pinyin[0];

    }

    //转换一个字符串
    public String getStringPinYin(String str) {
        StringBuilder sb = new StringBuilder();
        String tempPinyin = null;
        for (int i = 0; i < str.length(); ++i) {
            tempPinyin = getCharacterPinYin(str.charAt(i));
            if (tempPinyin == null) {
                // 如果str.charAt(i)非汉字,则保持原样
                sb.append(str.charAt(i));
            } else {
                sb.append(tempPinyin);
            }
        }
        return sb.toString();
    }
}

 

posted @ 2021-05-27 16:41  草木物语  阅读(487)  评论(0编辑  收藏  举报