汉语转拼音pinyin4j 代码实现

方法一:

 

import net.sourceforge.pinyin4j.PinyinHelper;
02import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
03import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
04import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
05import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
06 
07public class SpellHelper {
08    //将中文转换为英文
09    public static String getEname(String name) {
10        HanyuPinyinOutputFormat pyFormat = new HanyuPinyinOutputFormat();
11        pyFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
12        pyFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
13        pyFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
14 
15        return PinyinHelper.toHanyuPinyinString(name, pyFormat, "");
16    }
17 
18    //姓、名的第一个字母需要为大写
19    public static String getUpEname(String name) {
20        char[] strs = name.toCharArray();
21        String newname = null;
22               
23        //名字的长度
24        if (strs.length == 2) {   
25                newname = toUpCase(getEname("" + strs[0])) + " "
26                    + toUpCase(getEname("" + strs[1]));
27        } else if (strs.length == 3) {
28            newname = toUpCase(getEname("" + strs[0])) + " "
29                    + toUpCase(getEname("" + strs[1] + strs[2]));
30        } else if (strs.length == 4) {
31            newname = toUpCase(getEname("" + strs[0] + strs[1])) + " "
32                    + toUpCase(getEname("" + strs[2] + strs[3]));
33        } else {
34            newname = toUpCase(getEname(name));
35        }
36 
37        return newname;
38    }
39 
40    //首字母大写
41    private static String toUpCase(String str) {
42        StringBuffer newstr = new StringBuffer();
43        newstr.append((str.substring(0, 1)).toUpperCase()).append(
44                str.substring(1, str.length()));
45 
46        return newstr.toString();
47    }
48 
49    public static void main(String[] args) {
50        System.out.println(getUpEname("李宇春"));
51 
52    }
53 
54}

 

方法二:

package cn.com.utility.string.pinyin;
002 
003import net.sourceforge.pinyin4j.PinyinHelper;
004import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
005import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
006import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
007import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
008import cn.com.testClass.P;
009 
010/**
011* @className:PinyingUtil.java
012* @classDescription:拼音操作工具类
013* @author:xiayingjie
014* @createTime:2010-10-21
015*/
016 
017public class HanYuPinYinUtility {
018 
019    /**
020     * 将字符串转换成拼音数组
021     *
022     * @param src
023     * @return
024     */
025    public static String[] stringToPinyin(String src) {
026        return stringToPinyin(src, false, null);
027    }
028    /**
029     * 将字符串转换成拼音数组
030     *
031     * @param src
032     * @return
033     */
034    public static String[] stringToPinyin(String src,String separator) {
035        return stringToPinyin(src, true, separator);
036    }
037 
038    /**
039     * 将字符串转换成拼音数组
040     *
041     * @param src
042     * @param isPolyphone
043     *            是否查出多音字的所有拼音
044     * @param separator
045     *            多音字拼音之间的分隔符
046     * @return
047     */
048    public static String[] stringToPinyin(String src, boolean isPolyphone,
049            String separator) {
050        // 判断字符串是否为空
051        if ("".equals(src) || null == src) {
052            return null;
053        }
054        char[] srcChar = src.toCharArray();
055        int srcCount = srcChar.length;
056        String[] srcStr = new String[srcCount];
057 
058        for (int i = 0; i < srcCount; i++) {
059            srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
060        }
061        return srcStr;
062    }
063 
064    /**
065     * 将单个字符转换成拼音
066     *
067     * @param src
068     * @return
069     */
070    public static String charToPinyin(char src, boolean isPolyphone,
071            String separator) {
072        // 创建汉语拼音处理类
073        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
074        // 输出设置,大小写,音标方式
075        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
076        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
077 
078        StringBuffer tempPinying = new StringBuffer();
079       
080 
081        // 如果是中文
082        if (src > 128) {
083            try {
084                // 转换得出结果
085                String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,
086                        defaultFormat);
087               
088                       
089                // 是否查出多音字,默认是查出多音字的第一个字符
090                if (isPolyphone && null != separator) {
091                    for (int i = 0; i < strs.length; i++) {
092                        tempPinying.append(strs[i]);
093                        if (strs.length != (i + 1)) {
094                            // 多音字之间用特殊符号间隔起来
095                            tempPinying.append(separator);
096                        }
097                    }
098                } else {
099                    tempPinying.append(strs[0]);
100                }
101 
102            } catch (BadHanyuPinyinOutputFormatCombination e) {
103                e.printStackTrace();
104            }
105        } else {
106            tempPinying.append(src);
107        }
108 
109        return tempPinying.toString();
110 
111    }
112 
113   
114    public static String hanziToPinyin(String hanzi){
115        return hanziToPinyin(hanzi," ");
116    }
117    /**
118     * 将汉字转换成拼音
119     * @param hanzi
120     * @param separator
121     * @return
122     */
123    public static String hanziToPinyin(String hanzi,String separator){
124            // 创建汉语拼音处理类
125            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
126            // 输出设置,大小写,音标方式
127            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
128            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
129           
130            String pinyingStr="";
131            try {
132                pinyingStr=PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, separator);
133            } catch (BadHanyuPinyinOutputFormatCombination e) {
134                // TODO Auto-generated catch block
135                e.printStackTrace();
136            }  
137            return pinyingStr;
138    }
139    /**
140     * 将字符串数组转换成字符串
141     * @param str
142     * @param separator 各个字符串之间的分隔符
143     * @return
144     */
145    public static String stringArrayToString(String[] str, String separator) {
146        StringBuffer sb = new StringBuffer();
147        for (int i = 0; i < str.length; i++) {
148            sb.append(str[i]);
149            if (str.length != (i + 1)) {
150                sb.append(separator);
151            }
152        }
153        return sb.toString();
154    }
155    /**
156     * 简单的将各个字符数组之间连接起来
157     * @param str
158     * @return
159     */
160    public  static String stringArrayToString(String[] str){
161        return stringArrayToString(str,"");
162    }
163    /**
164     * 将字符数组转换成字符串
165     * @param str
166     * @param separator 各个字符串之间的分隔符
167     * @return
168     */
169    public static String charArrayToString(char[] ch, String separator) {
170        StringBuffer sb = new StringBuffer();
171        for (int i = 0; i < ch.length; i++) {
172            sb.append(ch[i]);
173            if (ch.length != (i + 1)) {
174                sb.append(separator);
175            }
176        }
177        return sb.toString();
178    }
179   
180    /**
181     * 将字符数组转换成字符串
182     * @param str
183     * @return
184     */
185    public static String charArrayToString(char[] ch) {
186        return charArrayToString(ch," ");
187    }
188 
189    /**
190     * 取汉字的首字母
191     * @param src
192     * @param isCapital 是否是大写
193     * @return
194     */
195    public static char[]  getHeadByChar(char src,boolean isCapital){
196        //如果不是汉字直接返回
197        if (src <= 128) {
198            return new char[]{src};
199        }
200        //获取所有的拼音
201        String []pinyingStr=PinyinHelper.toHanyuPinyinStringArray(src);
202        //创建返回对象
203        int polyphoneSize=pinyingStr.length;
204        char [] headChars=new char[polyphoneSize];
205        int i=0;
206        //截取首字符
207        for(String s:pinyingStr){
208            char headChar=s.charAt(0);
209            //首字母是否大写,默认是小写
210            if(isCapital){
211                headChars[i]=Character.toUpperCase(headChar);
212             }else{
213                headChars[i]=headChar;
214             }
215            i++;
216        }
217       
218        return headChars;
219    }
220    /**
221     * 取汉字的首字母(默认是大写)
222     * @param src
223     * @return
224     */
225    public static char[]  getHeadByChar(char src){
226        return getHeadByChar(src,true);
227    }
228    /**
229     * 查找字符串首字母
230     * @param src
231     * @return
232     */
233    public  static String[] getHeadByString(String src){
234        return getHeadByString( src, true);
235    }
236    /**
237     * 查找字符串首字母
238     * @param src
239     * @param isCapital 是否大写
240     * @return
241     */
242    public  static String[] getHeadByString(String src,boolean isCapital){
243        return getHeadByString( src, isCapital,null);
244    }
245    /**
246     * 查找字符串首字母
247     * @param src
248     * @param isCapital 是否大写
249     * @param separator 分隔符
250     * @return
251     */
252    public  static String[] getHeadByString(String src,boolean isCapital,String separator){
253        char[]chars=src.toCharArray();
254        String[] headString=new String[chars.length];
255        int i=0;
256        for(char ch:chars){
257           
258            char[]chs=getHeadByChar(ch,isCapital);
259            StringBuffer sb=new StringBuffer();
260            if(null!=separator){
261                int j=1;
262               
263                for(char ch1:chs){
264                    sb.append(ch1);
265                    if(j!=chs.length){
266                        sb.append(separator);
267                    }
268                    j++;
269                }
270            }else{
271                sb.append(chs[0]);
272            }
273            headString[i]=sb.toString();
274            i++;
275        }
276        return headString;
277    }
278   
279    public static void main(String[] args) {
280        //将字符串转换成拼音数组
281        String test1[]=stringToPinyin("曹顺写爪哇");
282        String test1st="";
283        for(int i=0;i<test1.length;i++){
284            test1st+=test1[i];
285        }
286        P.S(test1st);
287       
288        //将字符串转换成拼音数组,以逗号分隔
289        String test2[]=stringToPinyin("曹顺写爪哇",",");
290        String test2st="";
291        for(int i=0;i<test2.length;i++){
292            test2st+="||||"+test2[i];
293        }
294        P.S(test2st);
295       
296       
297        //将汉字转换成拼音
298        P.S("将汉字转换成拼音  曹顺写爪哇 ---->>>: "+hanziToPinyin("曹顺写爪哇!"," "));
299    }
300 
301

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值