import com.google.common.base.Strings;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.TreeSet; public class PinyinUtils {
private static final Logger logger = LoggerFactory.getLogger(PinyinUtils.class); /**
* 单字解析
*
* @param str first
* @return
*/
public static String[] convert(String str) {
String[] reslut = null;
HanyuPinyinOutputFormat hanyuPinyinOutputFormat = new HanyuPinyinOutputFormat();
hanyuPinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
try {
reslut = PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), hanyuPinyinOutputFormat);
TreeSet<String> stringTreeSet = new TreeSet<>();
for (int i = 0; i < reslut.length; i++) {
if(reslut.length >=3) {
break;
}
stringTreeSet.add(reslut[i].replace("u:","v"));
}
reslut = new String[stringTreeSet.size()];
reslut = stringTreeSet.toArray(reslut);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
} catch (Exception e) {
logger.error("[convert]: ", e);
}
return reslut;
} /**
* 词组解析(全写)
*
* @param chs
* @return
*/
public static String getSelling(String chs) {
return translate(chs, false);
} /**
* 汉字转拼音
*
* @param chs
* @param acronym
* @return
*/
private static String translate(String chs, boolean acronym) {
StringBuffer buffer=new StringBuffer();
if (Strings.isNullOrEmpty(chs))
return "";
try {
List<List<String>> temps = new ArrayList<>();
int len = chs.length();
int len1 = 0;
for (int i = 0; i < len; i++) {
List<String> stringList = new ArrayList<>();
String key = chs.charAt(i) + "";
if (key.getBytes().length >= 2) {
String[] temp = convert(key);
if(temp.length == 0) {
continue;
}
if (temp == null) {
stringList.add("");
} else {
for (String v : temp) {
stringList.add(v);
}
}
} else {
stringList.add(key);
}
temps.add(stringList);
len1++;
}
List<List<String>> t = new ArrayList<>();
for (int i = 0; i < len1; i++) {
List<String> currentList = new ArrayList<>();
List<String> stringList = temps.get(i);
if (stringList != null) {
for (String s : stringList) {
if (acronym) {
s = s.charAt(0) + "";
}
if (i > 0) {
List<String> preList = t.get(i - 1);
if (preList != null) {
for (String s1 : preList) {
currentList.add(s1 + s);
}
}
}else{
currentList.add(s);
}
}
}
t.add(i, currentList);
}
if (t.size()>0){
List<String> currentList= t.get(t.size()-1);
if (currentList!=null){
for(String current : currentList){
buffer.append(current);
buffer.append("");
}
}
}
return buffer.toString();
} catch (Exception e) {
logger.error("[getSortLetters]: ", e);
return "";
}
} /**
* 词组解析(缩写)
*
* @param chs
* @return
*/
public static String getSmallSelling(String chs) {
return translate(chs, true);
} /**
* 获取首字母
*
* @return
*/
public static String getSortLetters(String pingyin) {
try {
String sortString = pingyin.substring(0, 1).toUpperCase(Locale.getDefault());
// 正则表达式,判断首字母是否是英文字母
if (sortString.matches("[A-Z]")) {
return sortString.toUpperCase(Locale.getDefault());
}
} catch (Exception e) {
logger.error("[getSortLetters]: ", e);
}
return "#";
} public static void main(String [] args) {
PinyinUtils p = new PinyinUtils(); System.out.println(p.getSelling("单个"));
System.out.println(p.getSmallSelling("测试"));
}
}

java汉字转拼音的工具类的更多相关文章

  1. Java汉字转成汉语拼音工具类

    Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

  2. Java操作文件夹的工具类

    Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...

  3. java中excel导入\导出工具类

    1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...

  4. java中定义一个CloneUtil 工具类

    其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...

  5. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  6. Java加载Properties配置文件工具类

    Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...

  7. Java 操作Redis封装RedisTemplate工具类

    package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...

  8. java后台表单验证工具类

    /** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...

  9. 【转】Java压缩和解压文件工具类ZipUtil

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

随机推荐

  1. Linux Load average负载详细解释

    http://tianmaotalk.iteye.com/blog/1027970     Linux Load average负载详细解释   linux查看机器负载

  2. Jekins部署.net站点

    前提 1.你需要一台windows服务 可以装vs的且有重启电脑权限的(具体vs版本根据你的团队决定) 2.下载jekins 安装包 地址:https://jenkins.io/download/   ...

  3. Rabbitmq消息队列(五) 路由Routing

    1.简介 在以前一章中,我们可以把一个消息广播给多个接收者.在这一章中,我们会增加一个功能:接收者能够只接收订阅消息中的一个子集. 2.绑定 在我们将交换机和队列进行绑定的时候,我们可以添加一个额外的 ...

  4. SQL server账号无法登陆

  5. 本地测试Tomcat配置Https访问

    一.tomcat开启HTTPS配置 1) 准备证书 使用jdk工具keytool生成一个ssl测试用证书, 一路按照提示操作输入即可 keytool -genkey -alias tomcat -ke ...

  6. HTML5自定义属性之data-index

    #使用jquery获取data-index的值 jquery 的版本最好高一些 #html <div id = 'div'><span data-field='demo'>&l ...

  7. NPOI 导出Excel图片 (网络)

    导出网络图片,需要将网络图片下载到本地或者内存流中,建议下载的时候使用缩略图: 高清图片效率慢: Uri uri = new Uri(imgPath); //imgPath :网络图片地址 WebRe ...

  8. 【问题记录】shiro logout UnknownSessionException

    问题描述:web项目中使用shiro做登录权限控制,当shiro执行logout后,直接返回一个jsp路径会抛出org.apache.shiro.session.UnknownSessionExcep ...

  9. mongdb复制集搭建

    可参考官网教程 复制集增加了数据的冗余同时也提高了mongodb的可靠性,相比传统的主从架构,mongodb具有自动容灾的特性,即主库挂掉后会自动从剩下的从库中选举出一个节点做为主库(不需要人工干预) ...

  10. uvalive 3231 Fair Share 公平分配问题 二分+最大流 右边最多流量的结点流量尽量少。

    /** 题目: uvalive 3231 Fair Share 公平分配问题 链接:https://vjudge.net/problem/UVALive-3231 题意:有m个任务,n个处理器,每个任 ...