「Java工具類」漢語轉拼音工具類HanyuPinyinHelper.java
介紹語
本號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!
望各位碼友點擊關注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊
如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。
正文:
拼音轉換工具類,用到的場景比較少。
例子1
String s = "大師兄師傅被妖怪抓走了";
System.out.println(HanyuPinyinHelper.toPinyin(s));
System.out.println(HanyuPinyinHelper.toPinyinOfFirstLetter(s));
?
System.out.println(HanyuPinyinHelper.getFirstLettersUpper(s));
System.out.println(HanyuPinyinHelper.getFirstLettersLower(s));
?
// 控制臺輸出
dashixiongshifubeiyaoguaizhuazoule
DaShiXiongShiFuBeiYaoGuaiZhuaZouLe
DSXSFBYGZZL
dsxsfbygzzl
工具類源碼:
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 HanyuPinyinHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(HanyuPinyinHelper.class);
/**
* 將文字轉為漢語拼音
*
* @param chinese 要轉成拼音的中文
*/
public static String toPinyin(String chinese) {
char[] cl_chars = chinese.trim().toCharArray();
StringBuilder hanyupinyin = new StringBuilder();
HanyuPinyinOutputFormat defaultFormat = format();
try {
for (int i = 0; i < cl_chars.length; i++) {
// 如果字符是中文,則將中文轉為漢語拼音
if (String.valueOf(cl_chars[i]).matches("[\u4e00-\u9fa5]+")) {
hanyupinyin.append(PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0]);
} else {// 如果字符不是中文,則不轉換
hanyupinyin.append(cl_chars[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
LOGGER.error("字符不能轉成漢語拼音", e);
}
return hanyupinyin.toString();
}
/**
* 將文字轉為漢語拼音
*
* @param chinese 要轉成拼音的中文
*/
public static String toPinyinOfFirstLetter(String chinese) {
char[] cl_chars = chinese.trim().toCharArray();
StringBuilder hanyupinyin = new StringBuilder();
HanyuPinyinOutputFormat defaultFormat = format();
try {
for (int i = 0; i < cl_chars.length; i++) {
String str = String.valueOf(cl_chars[i]);
// 如果字符是中文,則將中文轉為漢語拼音
if (str.matches("[\u4e00-\u9fa5]+")) {
//多音字只取第一個
String s = PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0];
char firstLetter = s.charAt(0);
String pinyin = String.valueOf(firstLetter).toUpperCase().concat(s.substring(1));
hanyupinyin.append(pinyin);
} else {
// 如果字符不是中文,則不轉換
hanyupinyin.append(cl_chars[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
LOGGER.error("字符不能轉成漢語拼音", e);
}
return hanyupinyin.toString();
}
public static String getFirstLettersUpper(String chinese) {
return getFirstLetters(chinese, HanyuPinyinCaseType.UPPERCASE);
}
public static String getFirstLettersLower(String chinese) {
return getFirstLetters(chinese, HanyuPinyinCaseType.LOWERCASE);
}
private static String getFirstLetters(String chinese, HanyuPinyinCaseType caseType) {
char[] cl_chars = chinese.trim().toCharArray();
StringBuilder hanyupinyin = new StringBuilder();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 輸出拼音全部大寫
defaultFormat.setCaseType(caseType);
// 不帶聲調
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
try {
for (int i = 0; i < cl_chars.length; i++) {
String str = String.valueOf(cl_chars[i]);
if (str.matches("[\u4e00-\u9fa5]+")) {
// 如果字符是中文,則將中文轉為漢語拼音,并取第一個字母
hanyupinyin.append(
PinyinHelper.toHanyuPinyinStringArray(cl_chars[i], defaultFormat)[0].substring(0, 1));
} else if (str.matches("[0-9]+")) {
// 如果字符是數字,取數字
hanyupinyin.append(cl_chars[i]);
} else if (str.matches("[a-zA-Z]+")) {
// 如果字符是字母,取字母
hanyupinyin.append(cl_chars[i]);
} else {// 否則不轉換
hanyupinyin.append(cl_chars[i]);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
LOGGER.error("字符不能轉成漢語拼音", e);
}
return hanyupinyin.toString();
}
private static HanyuPinyinOutputFormat format() {
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 輸出拼音全部小寫
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 不帶聲調
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
return defaultFormat;
}
public static void main(String[] args) {
String s = "大師兄師傅被妖怪抓走了";
System.out.println(HanyuPinyinHelper.toPinyin(s));
System.out.println(HanyuPinyinHelper.toPinyinOfFirstLetter(s));
System.out.println(HanyuPinyinHelper.getFirstLettersUpper(s));
System.out.println(HanyuPinyinHelper.getFirstLettersLower(s));
}
}
maven依賴包
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。
計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。

浙公網安備 33010602011771號