Java 汉字转拼音(全拼与简拼)的方法

最近在项目中遇到了要将火车站名转换为全拼与简拼,在网上找了几种方法,又在大神同事的帮忙下,找到了一种比较好的方法,在此分享给有需要的朋友。

一、依赖导入

gradle导入:

    compile 'com.belerweb:pinyin4j:2.5.0'

maven导入:

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

二、txt文件

点击查看txt文件内容

复制粘贴为duoyinzi_pinyin.txt文件,放在项目的resources目录下

三、工具类

public class PinyinUtils {
    
    public static Map<String, String> dictionary = new HashMap<>();
    
    //加载多音字词典
    static {
        
        ClassPathResource resource = new ClassPathResource("duoyinzi_pinyin.txt");
        try (BufferedReader br = resource.getReader(Charset.forName("UTF-8"))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] arr = line.split("#");
                if (StringUtils.isNotEmpty(arr[1])) {
                    String[] sems = arr[1].split(" ");
                    for (String sem : sems) {
                        if (StringUtils.isNotEmpty(sem)) {
                            dictionary.put(sem, arr[0]);
                        }
                    }
                }
            }
        } catch (IOException e) {
            throw new ServiceException("读取文件失败,reader close 失败");
        }
        
    }
    
    public static String[] chineseToPinYin(char chineseCharacter) throws BadHanyuPinyinOutputFormatCombination {
        HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
        outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
        
        if (chineseCharacter >= 32 && chineseCharacter <= 125) {    //ASCII >=33 ASCII<=125的直接返回 ,ASCII码表:http://www.asciitable.com/
            return new String[]{String.valueOf(chineseCharacter)};
        }
        
        return PinyinHelper.toHanyuPinyinStringArray(chineseCharacter, outputFormat);
    }
    
    /**
     * 获取汉字拼音的全拼
     *
     * @param chineseCharacter 需要转换的文字
     * @return 转换完成的全拼
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public static String chineseToPinYinF(String chineseCharacter) throws BadHanyuPinyinOutputFormatCombination {
        if (StringUtils.isEmpty(chineseCharacter)) {
            return null;
        }
        
        char[] chs = chineseCharacter.toCharArray();
        
        StringBuilder result = new StringBuilder();
        
        for (int i = 0; i < chs.length; i++) {
            String[] arr = chineseToPinYin(chs[i]);
            if (arr == null) {
                result.append("");
            } else if (arr.length == 1) {
                result.append(arr[0]);
            } else if (arr[0].equals(arr[1])) {
                result.append(arr[0]);
            } else {
                
                String prim = chineseCharacter.substring(i, i + 1);
                String lst = null, rst = null;
                
                if (i <= chineseCharacter.length() - 2) {
                    rst = chineseCharacter.substring(i, i + 2);
                }
                if (i >= 1 && i + 1 <= chineseCharacter.length()) {
                    lst = chineseCharacter.substring(i - 1, i + 1);
                }
                
                String answer = null;
                for (String py : arr) {
                    
                    if (StringUtils.isEmpty(py)) {
                        continue;
                    }
                    
                    if ((lst != null && py.equals(dictionary.get(lst))) ||
                            (rst != null && py.equals(dictionary.get(rst)))) {
                        answer = py;
                        break;
                    }
                    
                    if (py.equals(dictionary.get(prim))) {
                        answer = py;
                    }
                }
                if (answer != null) {
                    result.append(answer);
                }
            }
        }
        
        return result.toString().toLowerCase();
    }
    
    /**
     * 获取简拼
     *
     * @param chineseCharacter 需要转换的汉字
     * @return 转换后的简拼
     */
    public static String chineseToPinYinS(String chineseCharacter) {
        if (StringUtils.isEmpty(chineseCharacter)) {
            return null;
        }
        
        char[] chs = chineseCharacter.toCharArray();
        
        StringBuilder result = new StringBuilder();
        
        for (int i = 0; i < chs.length; i++) {
            String[] arr = new String[0];
            try {
                arr = chineseToPinYin(chs[i]);
            } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                badHanyuPinyinOutputFormatCombination.printStackTrace();
            }
            if (arr == null) {
                result.append("");
            } else if (arr.length == 1) {
                result.append(arr[0].charAt(0));
            } else if (arr[0].equals(arr[1])) {
                result.append(arr[0].charAt(0));
            } else {
                
                String prim = chineseCharacter.substring(i, i + 1);
                
                String lst = null, rst = null;
                
                if (i <= chineseCharacter.length() - 2) {
                    rst = chineseCharacter.substring(i, i + 2);
                }
                if (i >= 1 && i + 1 <= chineseCharacter.length()) {
                    lst = chineseCharacter.substring(i - 1, i + 1);
                }
                
                String answer = null;
                for (String py : arr) {
                    
                    if (StringUtils.isEmpty(py)) {
                        continue;
                    }
                    
                    if ((lst != null && py.equals(dictionary.get(lst))) ||
                            (rst != null && py.equals(dictionary.get(rst)))) {
                        answer = py;
                        break;
                    }
                    
                    if (py.equals(dictionary.get(prim))) {
                        answer = py;
                    }
                }
                if (answer != null) {
                    result.append(answer.charAt(0));
                }
            }
        }
        return result.toString().toUpperCase();
    }
}

四、使用

直接调用即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现JS获取中文拼音全拼,可以借助第三方库pinyin.js来实现。pinyin.js是一个基于汉字拼音JavaScript库,可以将中文拼音,并具有全拼简拼以及多音字处理的功能。 实现的步骤如下: 1. 首先,下载pinyin.js库,并在HTML文件中引入该库的脚本。 2. 创建一个input文本框,用于输入中文字符。 3. 监听input文本框的oninput事件,在事件处理函数中获取输入的中文字符。 4. 使用pinyin.js库的方法将中文字符换成拼音。可以使用pinyin.js库提供的toPinyin方法来实现,该方法接收一个字符串参数,返回对应的拼音全拼字符串。 5. 将换后的拼音全拼字符串显示在页面上,可以通过innerHTML或者innerText属性来设置显示内容。 示例代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="pinyin.js"></script> </head> <body> <input id="input" type="text" oninput="getFullPinyin()"> <div id="pinyin"></div> <script> function getFullPinyin() { var input = document.getElementById("input").value; var fullPinyin = pinyinUtil.toPinyin(input, '', true); document.getElementById("pinyin").innerText = fullPinyin; } </script> </body> </html> ``` 以上示例中,pinyin.js库被引入,并在输入框的oninput事件中调用getFullPinyin函数,获取中文输入的拼音全拼,并将结果显示在id为pinyin的div元素中。 ### 回答2: 在JavaScript中,可以使用第三方库来获取中文拼音全拼。其中一个常用的库是pinyin.js。使用该库可以非常方便地将中文换成拼音全拼。 首先,需要将pinyin.js库引入到项目中。可以通过在HTML文件中添加如下代码来实现: ```html <script src="pinyin.js"></script> ``` 假设我们要获取中文字符串"中国"的拼音全拼。可以使用以下代码来实现: ```javascript var pinyin = PinyinHelper.convertToPinyinString("中国", "", PinyinFormat.WITHOUT_TONE); console.log(pinyin); // 输出:zhongguo ``` 在上述代码中,`PinyinHelper.convertToPinyinString`函数接受三个参数。第一个参数是要换的中文字符串,第二个参数是分隔符,指定将拼音拼接在一起时使用的分隔符,默认为空字符串。第三个参数是拼音格式,可选值有WITH_TONE_NUMBER(带声调数字)、WITHOUT_TONE(不带声调)和WITH_TONE_MARK(带声调符号)。 通过调用`PinyinHelper.convertToPinyinString`函数,即可将中文字符串换为拼音全拼。以上例子中,输出结果为"zhongguo",即“中国”的拼音全拼。 ### 回答3: 要使用JavaScript获取中文拼音全拼,我们可以借助第三方的拼音库,比如pinyin.js。首先,我们需要在项目中引入该库。 然后,我们可以使用该库的方法将中文换为拼音。具体的步骤如下: 1. 创建一个存储中文字符串的变量。 2. 使用pinyin库的方法,将中文字符串换为拼音数组。 3. 将拼音数组换为拼音字符串。 4. 输出拼音字符串。 下面是一个示例代码: ```javascript // 引入pinyin库 import pinyin from 'pinyin'; // 定义中文字符串 const chineseString = '中文拼音'; // 将中文字符串换为拼音数组 const pinyinArray = pinyin(chineseString, { style: pinyin.STYLE_NORMAL, // 获取全拼 }); // 将拼音数组换为拼音字符串 const pinyinString = pinyinArray.join(''); console.log(pinyinString); // 输出拼音字符串 ``` 上述代码中,我们使用`pinyin.STYLE_NORMAL`来获取中文拼音全拼形式。你也可以尝试其他的拼音风格,比如缩写形式。 总之,通过使用第三方库pinyin.js,我们可以方便地在JavaScript中获取中文字符串的拼音全拼

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值