zoukankan      html  css  js  c++  java
  • Java 获取汉字串首字母并大写和获取汉字的全拼,英文字符不变

      在开发中我们难免会遇到需要提出汉字中的拼音的首字母、提出汉字的拼音,接着便介绍一个工具类 pinyin4j.jar,首先需要下载 jar 包。

    Pinyin4j是一个功能强悍的汉语拼音工具包,是sourceforge.net上的一个开源项目。 
    主要的功能有: 
    - 支持同一汉字有多个发音 
    - 支持拼音的格式化输出,比如第几声之类的 
    - 支持简体中文、繁体中文转换为拼音 

    末尾有一个 cleanChar() 方法,目的是为了清除字符串中所有的特殊字符,避免字符的出现会中断拼音的输出导致报错,简而言之,清楚汉字和英文以外的所有字符(当然没有写完所有的字符,只是写了部分常用的,欢迎各位提出以更简洁的方法替换这些字符)

    具体方法如下:

      1 package com.jd.ddkdy.util;
      2 
      3 import java.util.regex.Matcher;
      4 import java.util.regex.Pattern;
      5 
      6 import net.sourceforge.pinyin4j.PinyinHelper;
      7 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
      8 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
      9 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
     10 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
     11 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
     12 
     13 /**
     14  * 字符串转换为拼音工具类
     15  * 
     16  * @projectName: PinyinDome
     17  */
     18 public class PinyinUtils {
     19 
     20     /**
     21      * 获得汉语拼音首字母
     22      *
     23      * @param chines
     24      *            汉字
     25      * @return
     26      */
     27     public static String getAlpha(String chines) {
     28         chines = cleanChar(chines);
     29         String pinyinName = "";
     30         char[] nameChar = chines.toCharArray();
     31         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
     32         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
     33         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
     34         for (int i = 0; i < nameChar.length; i++) {
     35             if (nameChar[i] > 128) {
     36                 try {
     37                     pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
     38                 } catch (BadHanyuPinyinOutputFormatCombination e) {
     39                     e.printStackTrace();
     40                 }
     41             } else {
     42                 pinyinName += nameChar[i];
     43             }
     44         }
     45         return pinyinName;
     46     }
     47 
     48     /**
     49      * 将字符串中的中文转化为拼音,英文字符不变
     50      *
     51      * @param inputString
     52      *            汉字
     53      * @return
     54      */
     55     public static String getPingYin(String inputString) {
     56         inputString = cleanChar(inputString);
     57         HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
     58         format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
     59         format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
     60         format.setVCharType(HanyuPinyinVCharType.WITH_V);
     61         String output = "";
     62         if (inputString != null && inputString.length() > 0 && !"null".equals(inputString)) {
     63             char[] input = inputString.trim().toCharArray();
     64             try {
     65                 for (int i = 0; i < input.length; i++) {
     66                     if (java.lang.Character.toString(input[i]).matches("[\u4E00-\u9FA5]+")) {
     67                         String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);
     68                         output += temp[0];
     69                     } else
     70                         output += java.lang.Character.toString(input[i]);
     71                 }
     72             } catch (BadHanyuPinyinOutputFormatCombination e) {
     73                 e.printStackTrace();
     74             }
     75         } else {
     76             return "*";
     77         }
     78         return output;
     79     }
     80 
     81     /**
     82      * 汉字转换位汉语拼音首字母,英文字符不变
     83      *
     84      * @param chines
     85      *            汉字
     86      * @return 拼音
     87      */
     88     public static String converterToFirstSpell(String chines) {
     89         chines = cleanChar(chines);
     90         String pinyinName = "";
     91         char[] nameChar = chines.toCharArray();
     92         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
     93         defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
     94         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
     95         for (int i = 0; i < nameChar.length; i++) {
     96             if (nameChar[i] > 128) {
     97                 try {
     98                     pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
     99                 } catch (BadHanyuPinyinOutputFormatCombination e) {
    100                     e.printStackTrace();
    101                 }
    102             } else {
    103                 pinyinName += nameChar[i];
    104             }
    105         }
    106         return pinyinName;
    107     }
    108 
    109     /**
    110      * 清理特殊字符以便得到
    111      * @param chines
    112      * @return
    113      */
    114     public static String cleanChar(String chines) {
    115         chines = chines.replaceAll("[\p{Punct}\p{Space}]+", ""); // 正则去掉所有字符操作
    116         // 正则表达式去掉所有中文的特殊符号
    117         String regEx = "[`~!@#$%^&*()+=|{}':;',\[\].<>/?~!@#¥%……&*()——+|{}<>《》【】‘;:”“’。,、?]";
    118         Pattern pattern = Pattern.compile(regEx);
    119         Matcher matcher = pattern.matcher(chines);
    120         chines = matcher.replaceAll("").trim();
    121         return chines;
    122     }
    123 
    124 }

    下载 pinyin4j-2.5.0.jar

  • 相关阅读:
    SpringBoot开发中的坑 记录一些
    MongoDB 文档【行】
    MongoDB 集合【表】
    MongoDB 数据库
    MongoDB 基础
    gitlab或github下fork后如何同步源的新更新内容?
    解决:android源码同步repo sync 时出现的fatal:duplicate path错误
    android ROM刷机updater-script单刷补丁包脚本
    一键解包/打包boot.img/recovery.img工具(高通/MTK双版 支持android 5.1以上)
    解决:github上传时出现error: src refspec master does not match any
  • 原文地址:https://www.cnblogs.com/yjq520/p/7681537.html
Copyright © 2011-2022 走看看