通过pinyin4j将汉字转换为全拼 和 拼音首字母

/**
     * 汉字转换为拼音 包含多音字,包含生母zh,ch,sh的
     */
    public void toPinYinAll(){
        String initials = "zh,ch,sh";
        //返回汉语拼音的全拼
        List<String> result = new ArrayList<String>();
        //返回汉语拼音的单拼
        List<String> firstResult = new ArrayList<String>();
        result.add("");
        firstResult.add("");
        String text = "我重情长";

        char[] t1 = null;
        t1 = text.toCharArray();

        //设置汉字拼音的输出格式
        HanyuPinyinOutputFormat hf = new HanyuPinyinOutputFormat();
        //设置输出类型为小写
        hf.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        //设置音标类型为无音标
        hf.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        //设置 吕中u转换为v
        hf.setVCharType(HanyuPinyinVCharType.WITH_V);

        StringBuilder sb = new StringBuilder();
        for(char c : t1){
            //判断是否是汉字
            if(Character.toString(c).matches("[\\u4E00-\\u9FA5]+")){
                try {
                    String[] t2 = PinyinHelper.toHanyuPinyinStringArray(c, hf);
                    //去掉 多音词中 拼音相同 声调不同的重复拼音
                    Set<String> set = new HashSet<String>();
                    set.addAll(Arrays.asList(t2));
                    t2 = set.toArray(new String[0]);
                    if(t2!=null && t2.length>1){
                        List<String> temp = new ArrayList<String>();
                        List<String> firstTemp = new ArrayList<String>();
                        temp.addAll(result);
                        firstTemp.addAll(firstResult);
                        for(int i=0;i<t2.length;i++){
                            int n = result.size();
                            String token = t2[i];
                            String firstToken = ""+token.charAt(0);
                            if(initials.contains(token.substring(0, 2))){
                                firstToken = token.substring(0, 2);
                            }
                            if(i==0){
                                for(int j=0;j<n;j++){
                                    String s = result.get(j);
                                    result.remove(j);
                                    result.add(j, s+token);

                                    String fs = firstResult.get(j);
                                    firstResult.remove(j);
                                    firstResult.add(j, fs+firstToken);
                                }
                            }else{
                                for(int j=0;j<n;j++){
                                    String s = temp.get(j);
                                    temp.remove(j);
                                    temp.add(j, s+token);

                                    String fs = firstTemp.get(j);
                                    firstTemp.remove(j);
                                    firstTemp.add(j, fs+firstToken);
                                }
                                result.addAll(temp);
                                firstResult.addAll(firstTemp);
                            }
                        }
                    }else{
                        int n = result.size();
                        for(int i=0;i<n;i++){
                            String s = result.get(i);
                            result.remove(i);
                            result.add(i, s+t2[0]);

                            String firstToken = ""+t2[0].charAt(0);
                            if(initials.contains(t2[0].substring(0, 2))){
                                firstToken = t2[0].substring(0, 2);
                            }
                            String fs = firstResult.get(i);
                            firstResult.remove(i);
                            firstResult.add(i, fs+firstToken);
                        }
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            }else{
                int n = result.size();
                for(int i=0;i<n;i++){
                    String s = result.get(i);
                    result.remove(i);
                    result.add(i,s+String.valueOf(c));
                }
            }
        }
        System.out.println(result.toString());
        System.out.println(firstResult.toString());
    }

结果:

[wozhongqingzhang, wochongqingzhang, wozhongqingchang, wochongqingchang]
[wzhqzh, wchqzh, wzhqch, wchqch]

通过pinyin4j将汉字转换为全拼 和 拼音首字母

时间: 2024-08-25 00:38:44

通过pinyin4j将汉字转换为全拼 和 拼音首字母的相关文章

将汉字转换为全拼 、提取每个汉字的首字母

其中使用到的包:pinyin4j-2.5.0.jar 下载地址:http://sourceforge.net/projects/pinyin4j/files/ 最新版本:pinyin4j-2.5.0

C# 获取汉字的拼音首字母(转)

原文:https://blog.csdn.net/younghaiqing/article/details/62417269 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手动把该汉字移动到对应的拼音首字母队列,我们这里介绍第二种. 获取汉字拼音的首字母是一个在做项目的过程中经常需要用到的功能,今天我们主要来探讨下C# 获取汉字的拼音首字母 static void Main

sqlserver 汉字转全拼函数

create function fn_Getquanpin (@str varchar(100)) returns varchar(8000) as begin declare @re varchar(8000),@crs varchar(10) declare @strlen int select @strlen=len(@str),@re='' while @strlen>0 begin set @crs= substring(@str,@strlen,1) select @re= case

js汉语转拼音(全拼、首字母、拼音首字母)

新建js文件first_alphabet.js 1 // JavaScript Document 2 // 汉字拼音首字母列表 本列表包含了20902个汉字,用于配合 ToChineseSpell 3 //函数使用,本表收录的字符的Unicode编码范围为19968至40869, XDesigner 整理 4 var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSC" + 5 "DQLDYLYBSSJGYZZJJFKCC

简单测试--C#实现中文汉字转拼音首字母

第一种: 这个是自己写的比较简单的实现方法,要做汉字转拼音首字母,首先应该有一个存储首字母的数组,然后将要转拼音码的汉字与每个首字母开头的第一个汉字即"最小"的汉字作比较,这里的最小指的是按拼音规则比较最小,例如a比h小,所以"爱"比"恨"小,同一个字母开头的拼音比较大小以此类推.最后实现的结果是只转汉字,对于中文特殊字符.标点符号和英文都原样输出,不转码. 实现方法如下: 1 using System; 2 using System.Colle

利用排序规则特点计算汉字笔划和取得拼音首字母

SQL SERVER的排序规则平时使用不是很多,也许不少初学者还比较陌生,但有一个错误大家应是经常碰到: SQL SERVER数据库,在跨库多表连接查询时,若两数据库默认字符集不同,系统就会返回这样的错误:     "无法解决 equal to 操作的排序规则冲突." 一.错误分析: 这个错误是因为排序规则不一致造成的,我们做个测试,比如:create table #t1(name varchar(20) collate Albanian_CI_AI_WS, value int) cr

C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母

代码参考该文http://www.cnblogs.com/yazdao/archive/2011/06/04/2072488.html VS2015版本 1.使用Nuget 安装 "SimplifiedChinesePinYinConversion" 2.代码: using Microsoft.International.Converters.PinYinConverter; using System; using System.Collections.Generic; using S

ios汉字转拼音首字母

ios汉字转拼音首字母 //获取拼音首字母(传入汉字字符串, 返回大写拼音首字母) - (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransform

mysql数据库中查询汉字的拼音首字母

本人提供的方法有如下特点: 1.代码精简,使用简单,只要会基本的SQL语句就行2.不用建立mysql 函数等复杂的东西3.汉字库最全,可查询20902个汉字方法如下:1.建立拼音首字母资料表Sql代码:(最好再加上主键和索引) DROP TABLE IF EXISTS `pinyin`; CREATE TABLE `pinyin` ( `PY` varchar(1), `HZ1` varchar(1), `HZ2` varchar(1) ) ; INSERT   INTO   `pinyin`