Pinyin4j简单使用教程

  • 时间:2019-08-22 02:19 作者:smileNicky 来源:smileNicky 阅读:605
  • 扫一扫,手机访问
摘要:Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求客户输入汉字后转换为拼音的场景,这时候Pinyin4j即可以派上用场有自己私服的可以下载到私服,而后maven引入 dependency groupId net

Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换,拼音输出格式可以定制,在项目中经常会遇到需求客户输入汉字后转换为拼音的场景,这时候Pinyin4j即可以派上用场

有自己私服的可以下载到私服,而后maven引入

<dependency>            <groupId>net.sourceforge.pinyin4j</groupId>            <artifactId>pinyin4j</artifactId>            <version>2.5.0</version>        </dependency>

或者者自己去pinyin4j官网下载http://pinyin4j.sourceforge.net

Pinyin4j支持方式:

  • 1.支持简体中文和繁体中文字符
  • 2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼 法和国语罗马字
  • 3.支持多音字,就可以获取一个中文字符的多种发音
  • 4.支持多种字符串输出格式,比方支持Unicode格式的字符ü和声调符号(阴平 "ˉ",阳平"ˊ",上声"ˇ",去声"ˋ")的输出

Pinyin4j支持多种格式:

  • 一律大小YHY
  • 一律大写(中间加字符串*)
  • 一律小写
  • 一律小写(中间加字符串*)
  • 返回首字母大写Y
  • 返回首字母小写y

针对什么情况,分别给出使用方法:

Pinyin4j pinyin4j = new Pinyin4j();String first1 = pinyin4j.toPinYinUppercase("测试中文");String first2 = pinyin4j.toPinYinUppercase("测试中文", "**");String first3 = pinyin4j.toPinYinLowercase("测试中文");String first4 = pinyin4j.toPinYinLowercase("测试中文","**");String first5 = pinyin4j.toPinYinUppercaseInitials("测试中文");String first6 = pinyin4j.toPinYinLowercaseInitials("测试中文");

而后给出封装的工具类java代码:

import java.util.HashSet;import java.util.Set;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 Pinyin4jUtil {        /**     * getFirstSpellPinYin:(多音字的时候获取第一个). <br/>      * @param src  传入的拼音字符串,以逗号隔开     * @param isFullSpell 能否全拼,true:全拼,false:第一个汉字全拼(其它汉字取首字母)     * @return 第一个拼音     */    public static String getFirstSpellPinYin(String src , boolean isFullSpell) {        String targetStr = Pinyin4jUtil.makeStringByStringSet(Pinyin4jUtil.getPinyin(src, isFullSpell));        String[] split = targetStr.split(",");        if (split.length > 1) {            targetStr = split[0];        }        return targetStr;    }    /**     * makeStringByStringSet:(拼音字符串集合转换字符串(逗号分隔)). <br/>      * @param stringSet  拼音集合     * @return  带逗号字符串     */    public static String makeStringByStringSet(Set<String> stringSet) {        StringBuilder str = new StringBuilder();        int i = 0;        if (stringSet.size() > 0) {            for (String s : stringSet) {                if (i == stringSet.size() - 1) {                    str.append(s);                } else {                    str.append(s + ",");                }                i++;            }        }        return str.toString().toLowerCase();    }    /**     * getPinyin:(获取汉字拼音). <br/>      * @param src   汉字     * @param isFullPin  能否全拼,假如为true:全拼,false:首字全拼     * @return     */    public static Set<String> getPinyin(String src, boolean isFullSpell) {        if (src != null && !src.trim().equalsIgnoreCase("")) {            char[] srcChar;            srcChar = src.toCharArray();            // 汉语拼音格式输出类            HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat();            // 输出设置,大小写,音标方式等            hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);            hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);            hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);            String[][] temp = new String[src.length()][];            for (int i = 0; i < srcChar.length; i++) {                char c = srcChar[i];                if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {//中文                    try {                        temp[i] = PinyinHelper.toHanyuPinyinStringArray(                                srcChar[i], hanYuPinOutputFormat);                        if (!isFullSpell) {                            if (i == 0) {                                temp[i] = temp[i];                            } else {                                String[] tTemps = new String[temp[i].length];                                for (int j = 0; j < temp[i].length; j++) {                                    char t = temp[i][j].charAt(0);                                    tTemps[j] = Character.toString(t);                                }                                temp[i] = tTemps;                            }                        }                    } catch (BadHanyuPinyinOutputFormatCombination e) {                        e.printStackTrace();                    }                } else if (((int) c >= 65 && (int) c <= 90)                        || ((int) c >= 97 && (int) c <= 122)) {//英文                    temp[i] = new String[] { String.valueOf(srcChar[i]) };                } else {                    temp[i] = new String[] { "" };                }            }            String[] pingyinArray = exchange(temp);            Set<String> pinyinSet = new HashSet<String>();            for (int i = 0; i < pingyinArray.length; i++) {                pinyinSet.add(pingyinArray[i]);            }            return pinyinSet;        }        return null;    }    /**     * 递归     * @param strJaggedArray     * @return     */    public static String[] exchange(String[][] strJaggedArray) {        String[][] temp = doExchange(strJaggedArray);        return temp[0];    }    /**     * 递归     * @param strJaggedArray     * @return     */    private static String[][] doExchange(String[][] strJaggedArray) {        int len = strJaggedArray.length;        if (len >= 2) {            int len1 = strJaggedArray[0].length;            int len2 = strJaggedArray[1].length;            int newlen = len1 * len2;            String[] temp = new String[newlen];            int Index = 0;            for (int i = 0; i < len1; i++) {                for (int j = 0; j < len2; j++) {                    temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];                    Index++;                }            }            String[][] newArray = new String[len - 1][];            for (int i = 2; i < len; i++) {                newArray[i - 1] = strJaggedArray[i];            }            newArray[0] = temp;            return doExchange(newArray);        } else {            return strJaggedArray;        }    }        }
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】pymysql使用(2025-10-27 23:27)
【系统环境|】如何使用Python和pymysql库连接数据库(2025-10-27 23:26)
【系统环境|】Python模块--PyMySQL(八)(2025-10-27 23:25)
【系统环境|】属性、正则表达式、pymysql、多线程编程(2025-10-27 23:24)
【系统环境|】一文讲完pymysql:python操作Mysql数据库(2025-10-27 23:23)
【系统环境|】Django使用上下文语句调用pymysql(2025-10-27 23:22)
【系统环境|】Python3.8 SQLAlchemy 和 PyMySQL 区别(2025-10-27 23:21)
【系统环境|】探讨NewSQL数据库在高并发场景下的ACID特性保障机制与实现策略(2025-10-27 23:21)
【系统环境|】MySQL 事务管理: ACID 特性实现原理(2025-10-27 23:20)
【系统环境|】数据库事务控制: 实现ACID特性及隔离级别调优(2025-10-27 23:19)
手机二维码手机访问领取大礼包
返回顶部