最近項目上遇到一個需求:模糊搜索姓名時既可以輸入漢字也可以輸入拼音進行搜索,這就要求在保存姓名時也要將其拼音保存起來。
好了,廢話不說了,直接上代碼!
實現步驟:
1、pom.xml配置文件引入jar包
<dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency>
2、將代碼實現邏輯封裝成一個工具類
package minyuantec.backupsystem.action; 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; public class PinyinUtil { /** * 將漢字轉換為全拼 * * @param src * @return String */ private static String getPinYin(String src) { char[] t1 = src.toCharArray(); String[] t2 = new String[t1.length]; // 設置漢字拼音輸出的格式 HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat(); t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE); t3.setVCharType(HanyuPinyinVCharType.WITH_V); String t4 = ""; int t0 = t1.length; try { for (int i = 0; i < t0; ++i) { // 判斷是否為漢字字符 if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) { t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 將漢字的幾種全拼都存到t2數組中 t4 += t2[0];// 取出該漢字全拼的第一種讀音並連接到字符串t4后 } else { // 如果不是漢字字符,直接取出字符並連接到字符串t4后 t4 = t4 + Character.toString(t1[i]); } } } catch (BadHanyuPinyinOutputFormatCombination var8) { var8.printStackTrace(); } return t4; } /** * 中文漢字轉成拼音首字母大寫 * * @param str * @return String */ public static String testPinyinInitial(String name){ String pinyinInitial = ""; try { char[] charArray = name.toCharArray(); StringBuilder pinyin = new StringBuilder(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); // 設置大小寫格式 defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 設置聲調格式: defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < charArray.length; i++) { // 匹配中文,非中文轉換會轉換成null if (Character.toString(charArray[i]).matches("[\\u4E00-\\u9FA5]+")) { String[] hanyuPinyinStringArray = PinyinHelper .toHanyuPinyinStringArray(charArray[i], defaultFormat); if (hanyuPinyinStringArray != null) { pinyin.append(hanyuPinyinStringArray[0].charAt(0)); } } } pinyinInitial = pinyin.toString(); return pinyinInitial; } catch (BadHanyuPinyinOutputFormatCombination e) { // TODO: handle exception } return pinyinInitial; } //中文漢字轉成ASCII碼 public static String getCnASCII(String cnStr) { StringBuffer strBuf = new StringBuffer(); // 將字符串轉換成字節序列 byte[] bGBK = cnStr.getBytes(); for (int i = 0; i < bGBK.length; i++) { // 將每個字符轉換成ASCII碼 strBuf.append(Integer.toHexString(bGBK[i] & 0xff) + " "); } return strBuf.toString(); } public static void main(String[] args) { String str = "你好世界"; String pinyin = getPinYin(str); System.out.println(pinyin); String pinyinInitial = testPinyinInitial(str); System.out.println(pinyinInitial); String ascii = getCnASCII(str); System.out.println(ascii); } }
打印結果為:
nihaoshijie
NHSJ
e4 bd a0 e5 a5 bd e4 b8 96 e7 95 8c
歡迎關注微信公眾號【Java典籍】,收看更多Java技術干貨!
▼微信掃一掃下圖↓↓↓二維碼關注