package cn.itcast.bos.utils;
 
import java.util.Arrays;
 
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.exception.BadHanyuPinyinOutputFormatCombination;
 
public class PinYin4jUtils {
    /**
    * 将字符串转换成拼音数组
    * 
    * @param src
    * @return
    */
    public static String[] stringToPinyin(String src) {
        return stringToPinyin(src, false, null);
    }
 
    /**
    * 将字符串转换成拼音数组
    * 
    * @param src
    * @return
    */
    public static String[] stringToPinyin(String src, String separator) {
 
        return stringToPinyin(src, true, separator);
    }
 
    /**
    * 将字符串转换成拼音数组
    * 
    * @param src
    * @param isPolyphone
    *            是否查出多音字的所有拼音
    * @param separator
    *            多音字拼音之间的分隔符
    * @return
    */
    public static String[] stringToPinyin(String src, boolean isPolyphone,
            String separator) {
        // 判断字符串是否为空
        if ("".equals(src) || null == src) {
            return null;
        }
        char[] srcChar = src.toCharArray();
        int srcCount = srcChar.length;
        String[] srcStr = new String[srcCount];
 
        for (int i = 0; i < srcCount; i++) {
            srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator);
        }
        return srcStr;
    }
 
    /**
    * 将单个字符转换成拼音
    * 
    * @param src
    * @return
    */
    public static String charToPinyin(char src, boolean isPolyphone,
            String separator) {
        // 创建汉语拼音处理类
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        // 输出设置,大小写,音标方式
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
 
        StringBuffer tempPinying = new StringBuffer();
 
        // 如果是中文
        if (src > 128) {
            try {
                // 转换得出结果
                String[] strs = PinyinHelper.toHanyuPinyinStringArray(src,
                        defaultFormat);
 
                // 是否查出多音字,默认是查出多音字的第一个字符
                if (isPolyphone && null != separator) {
                    for (int i = 0; i < strs.length; i++) {
                        tempPinying.append(strs[i]);
                        if (strs.length != (i + 1)) {
                            // 多音字之间用特殊符号间隔起来
                            tempPinying.append(separator);
                        }
                    }
                } else {
                    tempPinying.append(strs[0]);
                }
 
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
        } else {
            tempPinying.append(src);
        }
 
        return tempPinying.toString();
 
    }
 
    public static String hanziToPinyin(String hanzi) {
        return hanziToPinyin(hanzi, " ");
    }
 
    /**
    * 将汉字转换成拼音
    * 
    * @param hanzi
    * @param separator
    * @return
    */
    public static String hanziToPinyin(String hanzi, String separator) {
 
        // 创建汉语拼音处理类
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        // 输出设置,大小写,音标方式
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
 
        String pinyingStr = "";
        try {
            pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat,
                    separator);
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return pinyingStr;
    }
 
    /**
    * 将字符串数组转换成字符串
    * 
    * @param str
    * @param separator
    *            各个字符串之间的分隔符
    * @return
    */
    public static String stringArrayToString(String[] str, String separator) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < str.length; i++) {
            sb.append(str[i]);
            if (str.length != (i + 1)) {
                sb.append(separator);
            }
        }
        return sb.toString();
    }
 
    /**
    * 简单的将各个字符数组之间连接起来
    * 
    * @param str
    * @return
    */
    public static String stringArrayToString(String[] str) {
        return stringArrayToString(str, "");
    }
 
    /**
    * 将字符数组转换成字符串
    * 
    * @param str
    * @param separator
    *            各个字符串之间的分隔符
    * @return
    */
    public static String charArrayToString(char[] ch, String separator) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < ch.length; i++) {
            sb.append(ch[i]);
            if (ch.length != (i + 1)) {
                sb.append(separator);
            }
        }
        return sb.toString();
    }
 
    /**
    * 将字符数组转换成字符串
    * 
    * @param str
    * @return
    */
    public static String charArrayToString(char[] ch) {
        return charArrayToString(ch, " ");
    }
 
    /**
    * 取汉字的首字母
    * 
    * @param src
    * @param isCapital
    *            是否是大写
    * @return
    */
    public static char[] getHeadByChar(char src, boolean isCapital) {
        // 如果不是汉字直接返回
        if (src <= 128) {
            return new char[] { src };
        }
        // 获取所有的拼音
        String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src);
 
        // 创建返回对象
        int polyphoneSize = pinyingStr.length;
        char[] headChars = new char[polyphoneSize];
        int i = 0;
        // 截取首字符
        for (String s : pinyingStr) {
            char headChar = s.charAt(0);
            // 首字母是否大写,默认是小写
            if (isCapital) {
                headChars[i] = Character.toUpperCase(headChar);
            } else {
                headChars[i] = headChar;
            }
            i++;
        }
 
        return headChars;
    }
 
    /**
    * 取汉字的首字母(默认是大写)
    * 
    * @param src
    * @return
    */
    public static char[] getHeadByChar(char src) {
        return getHeadByChar(src, true);
    }
 
    /**
    * 查找字符串首字母
    * 
    * @param src
    * @return
    */
    public static String[] getHeadByString(String src) {
        return getHeadByString(src, true);
    }
 
    /**
    * 查找字符串首字母
    * 
    * @param src
    * @param isCapital
    *            是否大写
    * @return
    */
    public static String[] getHeadByString(String src, boolean isCapital) {
        return getHeadByString(src, isCapital, null);
    }
 
    /**
    * 查找字符串首字母
    * 
    * @param src
    * @param isCapital
    *            是否大写
    * @param separator
    *            分隔符
    * @return
    */
    public static String[] getHeadByString(String src, boolean isCapital,
            String separator) {
        char[] chars = src.toCharArray();
        String[] headString = new String[chars.length];
        int i = 0;
        for (char ch : chars) {
 
            char[] chs = getHeadByChar(ch, isCapital);
            StringBuffer sb = new StringBuffer();
            if (null != separator) {
                int j = 1;
 
                for (char ch1 : chs) {
                    sb.append(ch1);
                    if (j != chs.length) {
                        sb.append(separator);
                    }
                    j++;
                }
            } else {
                sb.append(chs[0]);
            }
            headString[i] = sb.toString();
            i++;
        }
        return headString;
    }
    
    public static void main(String[] args) {
        // pin4j 简码 和 城市编码 
        String s1 = "中华人民共和国"; 
        String[] headArray = getHeadByString(s1); // 获得每个汉字拼音首字母
        System.out.println(Arrays.toString(headArray));
        
        String s2 ="长城" ; 
        System.out.println(Arrays.toString(stringToPinyin(s2,true,",")));
        
        String s3 ="长";
        System.out.println(Arrays.toString(stringToPinyin(s3,true,",")));
    }
}

pinyin utils的更多相关文章

  1. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

  2. 【C#公共帮助类】 Utils 10年代码,最全的系统帮助类

    为大家分享一下个人的一个Utils系统帮助类,可能有些现在有新的技术替代,自行修改哈~ 这个帮助类主要包含:对象转换处理 .分割字符串.截取字符串.删除最后结尾的一个逗号. 删除最后结尾的指定字符后的 ...

  3. python学习笔记-import utils报错

    今天遇到一个坑爹的问题,查找了半天原因,终于解决了,在此特地记录一下. 运行环境:Windows eclipse 我在eclipse中配置了python的运行环境,在eclipse中编写python代 ...

  4. Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题

    回到目录 Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全 ...

  5. Utils

    import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.collections.CollectionUtils ...

  6. Spring @Autowired注解在utils静态工具类

    [转] 使用场景:在一个静态方法中,如何使用以下注入: @Autowired private ItemMapper itemMapper; @Component public class TestUt ...

  7. utils.js

    /** * //2.0检测方式(目测,测量,专用仪器测试等) function GetCheckType() { $.ajax({ url: '@Url.Action("GetCheckTy ...

  8. Perl/Nagios – Can’t locate utils.pm in @INC

    While trying to use a Nagios plugin I got an error saying that “Can’t locate utils.pm in @INC”. Foll ...

  9. 读取 java.nio.ByteBuffer 中的字符串(String) 写入方式flash.utils.ByteArray.writeUTF

    通过研究ByteArray的写入格式以及方法说明,可以发现writeUTF是先使用2位写入字符串的长度,然后在其后写入字符串编码. flash.utils.ByteArray.writeUTF(val ...

随机推荐

  1. CCF-201604-3-路径解析

    问题描述 试题编号: 201604-3 试题名称: 路径解析 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在操作系统中,数据通常以文件的形式存储在文件系统中.文件系统一般采 ...

  2. 第三节:Creating API Endpoints (创建API路由)

    对于这篇文章的标题,其实,直译就是创建api端点.但是,真的很难懂,我还是写为API路由吧.每篇,文章,我都会全部去进行实践操作,力求写一个好点的教程. 本文英文地址-->https://git ...

  3. sqlserver 全库查询 带架构

    网上现有的全库查询,无法识别自定义架构的数据库结构: ) ) ) declare @counts int )--以上定义变量 declare cur1 cursor for select a.name ...

  4. extr_shopping

    __author__ = 'ZZG' # noinspection PyCallingNonCallable shopping_list =[ ("iphone",5300), ( ...

  5. 这是我对GET与POST的区别的回答

    不知在哪里看到的这种答案,之前很长一段时间对GET与POST的区别理解如下 一是GET数据附加在URL之后,是显示的,不安全的,POST反之. 二是数据大小限制,GET受URL长度限制,数据有限,PO ...

  6. spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)

    **这个整合.仅仅是最主要的整合,而且是xml配置文件的方式之中的一个,即当中的mybatis是採用非mapper接口的方式.(第二遍採用mapper接口方式.第三遍採用注解的方式:第四篇採用注解基于 ...

  7. SSI学习(二)

    1.SSI指令 #config:指定返回到client浏览器的错误消息.日期和文件大小所使用的格式. #echo:在 HTML 页中插入环境变量的值. #exec:执行一个应用程序或一条 shell ...

  8. dynamic programming 学习

    这是看到一位大神,写的关于dynamic programming的博客,认为很好.简单分析下.然后给出链接. 背景问题就是 有一个国家,全部的国民都很老实憨厚,某天他们在自己的国家发现了十座金矿.而且 ...

  9. 一道题Wrong Answer之后该何去何从?

    写程序手不稳是个大毛病,往往会让一份能AC的代码变成99.995%正确,失之毫厘谬以千里,近期十场个人赛非常少有能一次AC的经历,细致想想除了根本逻辑上的错误.大概都是跪在这些细节上: 1.输出格式, ...

  10. java 可变參数

    我们在某些特定的需求环境下,可能要对某一个方法中的參数进行一些操作,并且这些方法中的參数是不规定的,那么问题来了,我们该怎么办呢? java事实上就为我们考虑了这样的情况,那就是使用可变參数 可变參数 ...