java中文转拼音工具类详解

 更新时间:2019年04月22日 08:32:37   作者:Tlimited  
这篇文章主要为大家详细介绍了java中文转拼音工具类的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java中文转拼音工具类的具体代码,供大家参考,具体内容如下

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PinyinUtil {
 public static String getPinyin(String paramString) {
 return getPinyinZh_CN(convertStringByChinese(paramString));
 }

 public static String getPinyinToUpperCase(String paramString) {
 return getPinyinZh_CN(convertStringByChinese(paramString)).toUpperCase();
 }

 public static String getPinyinToLowerCase(String paramString) {
 return getPinyinZh_CN(convertStringByChinese(paramString)).toLowerCase();
 }

 public static String getPinyinFirstToUpperCase(String paramString) {
 return getPinyin(paramString);
 }

 private static HanyuPinyinOutputFormat getDefaultFormat() {
 HanyuPinyinOutputFormat localHanyuPinyinOutputFormat = new HanyuPinyinOutputFormat();
 localHanyuPinyinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
 localHanyuPinyinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
 localHanyuPinyinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);
 return localHanyuPinyinOutputFormat;
 }

 private static Set<String> convertStringByChinese(String paramString) {
 char[] arrayOfChar1 = paramString.toCharArray();
 if ((paramString != null) && (!paramString.trim().equalsIgnoreCase(""))) {
 char[] arrayOfChar2 = paramString.toCharArray();
 String[][] arrayOfString = new String[paramString.length()][];
 for (int i = 0; i < arrayOfChar2.length; i++) {
 char c = arrayOfChar2[i];
 if ((String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) || (String.valueOf(c).matches("[\\u3007]"))) {
  try {
  arrayOfString[i] = PinyinHelper.toHanyuPinyinStringArray(arrayOfChar1[i], getDefaultFormat());
  } catch (BadHanyuPinyinOutputFormatCombination localBadHanyuPinyinOutputFormatCombination) {
  localBadHanyuPinyinOutputFormatCombination.printStackTrace();
  }
 } else {
  arrayOfString[i] = new String[] { String.valueOf(arrayOfChar2[i]) };
 }
 }
 String[] arrayOfString1 = exchange(arrayOfString);
 HashSet localHashSet = new HashSet();
 for (int j = 0; j < arrayOfString1.length; j++) {
 localHashSet.add(arrayOfString1[j]);
 }
 return localHashSet;
 }
 return null;
 }

 private static String[] exchange(String[][] paramArrayOfString) {
 String[][] arrayOfString = doExchange(paramArrayOfString);
 return arrayOfString[0];
 }

 private static String[][] doExchange(String[][] paramArrayOfString) {
 int i = paramArrayOfString.length;
 if (i >= 2) {
 int j = paramArrayOfString[0].length;
 int k = paramArrayOfString[1].length;
 int m = j * k;
 String[] arrayOfString = new String[m];
 int n = 0;
 for (int i1 = 0; i1 < j; i1++) {
 for (int i2 = 0; i2 < k; i2++) {
  arrayOfString[n] = (capitalize(paramArrayOfString[0][i1]) + capitalize(paramArrayOfString[1][i2]));
  n++;
 }
 }
 String[][] arrayOfString1 = new String[i - 1][];
 for (int i2 = 2; i2 < i; i2++) {
 arrayOfString1[(i2 - 1)] = paramArrayOfString[i2];
 }
 arrayOfString1[0] = arrayOfString;
 return doExchange(arrayOfString1);
 }
 return paramArrayOfString;
 }

 private static String capitalize(String paramString) {
 char[] arrayOfChar = paramString.toCharArray();
 if ((arrayOfChar != null) && (arrayOfChar.length > 0) && (arrayOfChar[0] >= 'a') && (arrayOfChar[0] <= 'z')) {
 arrayOfChar[0] = ((char) (arrayOfChar[0] - ' '));
 }
 return new String(arrayOfChar);
 }

 private static String getPinyinZh_CN(Set<String> paramSet) {
 StringBuilder localStringBuilder = new StringBuilder();
 int i = 0;
 Iterator localIterator = paramSet.iterator();
 while (localIterator.hasNext()) {
 String str = (String) localIterator.next();
 if (i == paramSet.size() - 1) {
 localStringBuilder.append(str);
 } else {
 localStringBuilder.append(str + ",");
 }
 i++;
 }
 return localStringBuilder.toString();
 }

 public static String getPinYinHeadChar(String paramString) {
 StringBuffer localStringBuffer = new StringBuffer();
 if ((paramString != null) && (!paramString.trim().equalsIgnoreCase(""))) {
 for (int i = 0; i < paramString.length(); i++) {
 char c = paramString.charAt(i);
 String[] arrayOfString = PinyinHelper.toHanyuPinyinStringArray(c);
 if (arrayOfString != null) {
  localStringBuffer.append(arrayOfString[0].charAt(0));
 } else {
  localStringBuffer.append(c);
 }
 }
 }
 return localStringBuffer.toString();
 }

 public static String strFilter(String paramString) throws PatternSyntaxException {
 String str = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“'。,、?\"]";
 Pattern localPattern = Pattern.compile(str);
 Matcher localMatcher = localPattern.matcher(paramString);
 return localMatcher.replaceAll("").trim();
 }

 public static String getPinYinHeadCharFilter(String paramString) {
 return strFilter(getPinYinHeadChar(paramString));
 }

 public static void main(String[] paramArrayOfString) {
 Logger localLogger = LoggerFactory.getLogger(PinyinUtil.class);
 String str = "〇的输¥¥#s,ldsa";
 localLogger.info("小写输出:" + getPinyinToLowerCase(str));
 localLogger.info("大写输出:" + getPinyinToUpperCase(str));
 localLogger.info("首字母大写输出:" + getPinyinFirstToUpperCase(str));
 localLogger.info("返回中文的首字母输出:" + getPinYinHeadChar(str));
 localLogger.info("返回中文的首字母并过滤特殊字符输出:" + getPinYinHeadCharFilter(str));
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot 实现定时任务的方法详解

    SpringBoot 实现定时任务的方法详解

    这篇文章主要介绍了SpringBoot 实现定时任务的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • SpringMVC中使用Thymeleaf模板引擎实例代码

    SpringMVC中使用Thymeleaf模板引擎实例代码

    这篇文章主要介绍了SpringMVC中使用Thymeleaf模板引擎实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 如何将mybatis配置到springmvc中

    如何将mybatis配置到springmvc中

    为了更方便的连接数据库,将mybatis配置到springMVC中。接下来通过本文给大家分享如何将mybatis配置到springmvc中,需要的朋友参考下吧
    2017-11-11
  • Java实现监控多个线程状态的简单实例

    Java实现监控多个线程状态的简单实例

    下面小编就为大家带来一篇Java实现监控多个线程状态的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • hibernate中的对象关系映射

    hibernate中的对象关系映射

    hibernate中的ORM映射文件通常以.hbm.xml作为后缀。使用这个映射文件不仅易读,而且可以手工修改,也可以通过一些工具来生成映射文档,下文给大家详细的介绍hibernate中的对象关系映射,需要的朋友参考下吧
    2017-09-09
  • 解析Java的设计模式编程之解释器模式的运用

    解析Java的设计模式编程之解释器模式的运用

    这篇文章主要介绍了解析Java的设计模式编程之解释器模式的运用,文中对解释器模式的优缺点及适用场景作出了分析,需要的朋友可以参考下
    2016-02-02
  • Java面向对象编程(封装/继承/多态)实例解析

    Java面向对象编程(封装/继承/多态)实例解析

    这篇文章主要介绍了Java面向对象编程(封装/继承/多态)实例解析的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • idea 打包的jar运行报

    idea 打包的jar运行报 "XXX中没有主清单属性"

    这篇文章主要介绍了idea 打包的jar运行报 "XXX中没有主清单属性",文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java 高并发五:JDK并发包1详细介绍

    Java 高并发五:JDK并发包1详细介绍

    本文主要介绍 Java高并发JDK并发包1的资料,这里对1.各种同步控制工具的使用 2.并发容器及典型源码分析,有需要的小伙伴可以参考下
    2016-09-09
  • 浅谈Java到底是值传递还是引用传递呢

    浅谈Java到底是值传递还是引用传递呢

    今天带大家学习Java的相关知识,文章围绕着Java到底是值传递还是引用传递展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论