获取拼音首字母(含生僻字)工具类

需要引入pinyin4j-2.5.0.jar

package com.ytzn.string;

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;

/**
 * 获取汉语文字的拼音
 * @version 1.0 23/07/2010
 */
public class PinyinUtil {

    /**
     * 汉语拼音格式化工具类
     */
    private static HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();


    /**
     * 获取字符串内的所有汉字的汉语拼音
     *
     * @param src 智宇数字
     * @return string --> zhi yu shu zi
     */
    public static String spell(String src) {
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写拼音字母
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不加语调标识
        format.setVCharType(HanyuPinyinVCharType.WITH_V); // u:的声母替换为v

        StringBuffer sb = new StringBuffer();
        int strLength = src.length();
        try {
            for (int i = 0; i < strLength; i++) {
                // 对英文字母的处理:小写字母转换为大写,大写的直接返回
                char ch = src.charAt(i);
                if (ch >= 'a' && ch <= 'z')
                    sb.append((char) (ch - 'a' + 'A'));
                if (ch >= 'A' && ch <= 'Z')
                    sb.append(ch);
                // 对汉语的处理
                String[] arr = PinyinHelper.toHanyuPinyinStringArray(ch, format);
                if (arr != null && arr.length > 0)
                    sb.append(arr[0]).append(" ");
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 获取字符串汉字带声调拼音,首字母大写
     *
     * @param src 智宇数字
     * @return string -->Zhì Yŭ Shù Zì
     */
    public static String spellWithTone(String src) {
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
        format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);// 标声调
        format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);// u:的声母

        if (src == null) {
            return null;
        }
        try {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < src.length(); i++) {
                // 对英文字母的处理:小写字母转换为大写,大写的直接返回
                char ch = src.charAt(i);
                if (ch >= 'a' && ch <= 'z')
                    sb.append((char) (ch - 'a' + 'A'));
                if (ch >= 'A' && ch <= 'Z')
                    sb.append(ch);
                // 对汉语的处理
                String[] arr = PinyinHelper.toHanyuPinyinStringArray(ch, format);
                if (arr == null || arr.length == 0) {
                    continue;
                }
                String s = arr[0];// 不管多音字,只取第一个
                char c = s.charAt(0);// 大写第一个字母
                String pinyin = String.valueOf(c).toUpperCase().concat(s.substring(1));
                sb.append(pinyin).append(" ");
            }
            return sb.toString();
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取字符串内的所有汉字的汉语拼音并大写每个字的首字母
     *
     * @param src 智宇数字
     * @return string --> ZhiYuShuZi
     */
    public static String spellNoneTone(String src) {
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);// 小写
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 标声调
        format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);// u:的声母

        if (src == null) {
            return null;
        }
        try {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < src.length(); i++) {
                // 对英文字母的处理:小写字母转换为大写,大写的直接返回
                char ch = src.charAt(i);
                if (ch >= 'a' && ch <= 'z')
                    sb.append((char) (ch - 'a' + 'A'));
                if (ch >= 'A' && ch <= 'Z')
                    sb.append(ch);
                // 对汉语的处理
                String[] arr = PinyinHelper.toHanyuPinyinStringArray(ch, format);
                if (arr == null || arr.length == 0) {
                    continue;
                }
                String s = arr[0];// 不管多音字,只取第一个
                char c = s.charAt(0);// 大写第一个字母
                String pinyin = String.valueOf(c).toUpperCase().concat(s.substring(1));
                sb.append(pinyin).append("");
            }
            return sb.toString();
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取汉语第一个字的首英文字母
     *
     * @param src 智宇数字
     * @return string --> Z
     */
    public static String getTerm(String src) {
        String res = spell(src);
        if (res.length() > 0) {
            return res.toUpperCase().charAt(0) + "";
        } else {
            return "OT";
        }
    }


    /**
     * 获取字符串汉字首字母大写拼接
     *
     * @param src 智宇数字
     * @return string -->ZYSZ
     */
    public static String getFirstUpperCaseString(String src) {
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 大写
        if (src == null) {
            return null;
        }
        try {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < src.length(); i++) {
                // 对英文字母的处理:小写字母转换为大写,大写的直接返回
                char ch = src.charAt(i);
                if (ch >= 'a' && ch <= 'z')
                    sb.append((char) (ch - 'a' + 'A'));
                if (ch >= 'A' && ch <= 'Z')
                    sb.append(ch);
                // 对汉语的处理
                String[] arr = PinyinHelper.toHanyuPinyinStringArray(ch, format);
                if (arr == null || arr.length == 0) {
                    continue;
                }
                String s = arr[0];// 不管多音字,只取第一个
                char c = s.charAt(0);// 大写第一个字母
                sb.append(c);
            }
            return sb.toString();
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return null;
    }
}

如果对您有帮助的话,给个赞好吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值