Java把中文汉字转换成拼音

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/09/zhong-wen-han-zi.html

依赖pinyin4j(pinyin for java)

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

使用示例

package com.yawn.pinyin;

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;

import static net.sourceforge.pinyin4j.format.HanyuPinyinCaseType.LOWERCASE;
import static net.sourceforge.pinyin4j.format.HanyuPinyinCaseType.UPPERCASE;

import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITHOUT_TONE;
import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITH_TONE_NUMBER;
import static net.sourceforge.pinyin4j.format.HanyuPinyinToneType.WITH_TONE_MARK;

import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_U_AND_COLON;
import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_V;
import static net.sourceforge.pinyin4j.format.HanyuPinyinVCharType.WITH_U_UNICODE;


/**
 * @author yawn
 * 2019/9/19 16:46
 */
public class Test {

    public static void main(String[] args) throws BadHanyuPinyinOutputFormatCombination {
        String str = "今天天气 真好!good! 率";
        HanyuPinyinOutputFormat fmt = new HanyuPinyinOutputFormat();
        String pinyin1 = PinyinHelper.toHanYuPinyinString(str, fmt, "", true);
        System.out.println(pinyin1); // jin1tian1tian1qi4 zhen1hao3!good! lu:4

        String pinyin2 = PinyinHelper.toHanYuPinyinString(str, fmt, "", false);
        System.out.println(pinyin2); // jin1tian1tian1qi4zhen1hao3lu:4

        String pinyin3 = PinyinHelper.toHanYuPinyinString(str, fmt, "-", true);
        System.out.println(pinyin3); // jin1-tian1-tian1-qi4- zhen1-hao3-!good! lu:4

        HanyuPinyinOutputFormat fmt2 = new HanyuPinyinOutputFormat();
        fmt2.setCaseType(UPPERCASE);
        fmt2.setToneType(WITHOUT_TONE);
        fmt2.setVCharType(WITH_V);
        String pinyin4 = PinyinHelper.toHanYuPinyinString(str, fmt2, " ", false);
        System.out.println(pinyin4); // JIN TIAN TIAN QI ZHEN HAO LV
    }
}

输出结果:

 jin1tian1tian1qi4 zhen1hao3!good! lu:4
 jin1tian1tian1qi4zhen1hao3lu:4
 jin1-tian1-tian1-qi4- zhen1-hao3-!good! lu:4
 JIN TIAN TIAN QI ZHEN HAO LV

PinyinHelper.toHanYuPinyinString方法说明

参数说明

str – 需要转换成拼音的中文汉字字符串
outputFormat – 转换的格式设置
separate – 转换后每个汉字拼音之间的分隔符
retain – 是否保留非中文汉字的字符

HanyuPinyinOutputFormat 拼音格式设置

HanyuPinyinOutputFormat 类可以设置拼音的格式,其中有三个属性:

  1. vCharType :对拼音 ü 的转换方式
  2. caseType :大小写的转换方式
  3. toneType :声调的转换方式

默认值如下:

  public void restoreDefault() {
    vCharType = HanyuPinyinVCharType.WITH_U_AND_COLON;
    caseType = HanyuPinyinCaseType.LOWERCASE;
    toneType = HanyuPinyinToneType.WITH_TONE_NUMBER;
  }

vCharType :对拼音 ü 的转换方式

HanyuPinyinVCharType.WITH_U_AND_COLON; // 使用 u: 代替
HanyuPinyinVCharType.WITH_V; // 使用 v 代替
HanyuPinyinVCharType.WITH_U_UNICODE; // 使用  ü  (字符不支持时会报错)

caseType :大小写的转换方式

HanyuPinyinCaseType.LOWERCASE; // 转换后问小写拼音
HanyuPinyinCaseType.UPPERCASE; // 转换后为大写拼音

toneType :声调的转换方式

HanyuPinyinToneType.WITHOUT_TONE; // 忽略拼音的声调
HanyuPinyinToneType.WITH_TONE_NUMBER; // 使用1234表示声调(轻声将被忽略)
HanyuPinyinToneType.WITH_TONE_MARK; // 使用声调字符 ā á ǎ à (字符不支持时会报错)

《Java把中文汉字转换成拼音》有1个修正笔记:

发表评论