發布時間:2024-01-23閱讀(7)

從網上找的資料,記得以前在C#中曾經用過這類資料,保存下來以后再進一步測試和應用。
一、引入maven依賴
<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version></dependency>
二、工具類PinyinUtil.java
package com.gl.util;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 PinyinUtil {/** * 將字符串轉換成拼音數組 * * @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 catchblocke.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, ",")));}}
三、運行結果
[H, H, X, X, T, T, X, S][ni, hao,hao][zhang,chang]
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖