zbb20180117 汉字转拼音 pinyin4
生活随笔
收集整理的這篇文章主要介紹了
zbb20180117 汉字转拼音 pinyin4
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
包地址 https://pan.baidu.com/disk/home?#list/vmode=list&path=%2F%E5%AD%A6%E4%B9%A0 Pinyin4j的基本用法 1.?簡單介紹 有時候,需要將漢字編程對應的拼音,以方便數據的處理。比如在Android手機應用的開發上,要查詢聯系人的姓名,通常都是用拼音進行查詢的。比如要查詢“曹孟德”,就可以輸入“cmd”,即“曹孟德”三個漢字的拼音“caomengde”各字的首字母。但是怎樣才能將“曹孟德”翻譯成“caomengde”呢?很簡單的辦法就是建立一個大的對照表(比如用關聯容器Map),比如<”曹”,”cao”>,<”?孟”,”meng”>,<”?德”,”de”>…但這樣的做法,需要維護好一個比較大的對照表,同時一個漢字可能有多個發音,也就是說Map這樣的容器時不行的,因為其<key,value>必須是一一對應的。在C++中可以用STL里面的multimap來解決這個問題,但Java中沒有類似multimap這樣的東西,除非自己實現一個。 ? Pinyin4j就是為了解決類似這樣的問題的。它是sourceforge.net上的一個開源項目,功能非常強大: +?支持同一漢字有多個發音 +?還支持拼音的格式化輸出,比如第幾聲之類的, +?同時支持簡體中文、繁體中文轉換為拼音…使用起來也非常簡單。下面是其官方網址,其中提供了下載: http://pinyin4j.sourceforge.net/ ? 2.?基本用法: 通常情況下,只需要用到其中的PinyinHelper類中的靜態方法toHanyuPinyinStringArray就可以了,比如: String[]?pinyinArray?=PinyinHelper.toHanyuPinyinStringArray('單'); for(int?i?=?0;?i?<?pinyinArray.length;?++i) { System.out.println(pinyinArray[i]); } 就會輸出: dan1 chan2 shan4 這三種發音,后面的數字代表第幾聲。可以看到靜態方法toHanyuPinyinStringArray返回的數據類型是一個String數組,它用來接收一個漢字的多個發音,如果toHanyuPinyinStringArray中的參數不是漢字,那么它會返回null。 ? 3.格式支持 Pinyin4j支持拼音輸出的格式化,比如,“黃”可以輸出為“huang”、“huang2”、“huáng”等等,下面的代碼就似是輸出“huáng”的示例: HanyuPinyinOutputFormat?format=?new?HanyuPinyinOutputFormat(); format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK); format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); ? String[]?pinyinArray?=?null; try { pinyinArray?=?PinyinHelper.toHanyuPinyinStringArray('黃',?format); } catch(BadHanyuPinyinOutputFormatCombination?e) { e.printStackTrace(); } for(int?i?=?0;?i?<?pinyinArray.length;?++i) { System.out.println(pinyinArray[i]); } 此外,還支持大小寫轉換、ü等等。詳細情況,可以查看Pinyin4j自帶的文檔。 ? 4.實際示例代碼 如果我們要將一段文字中的漢字全部轉換成不帶音調的拼音輸出,而這段文字中又可能包含阿拉伯數字、英文、標點符號等等。如果完全靠自己寫代碼進行轉換,那是非常麻煩的,其中一個首先就要區別,這段文字中那些是漢字,那些是非漢字。有了Pinyin4j,這個問題就不再困難了,因為對于非漢字,Pinyin4j會自動輸出null。參考下面的示例代碼: importnet.sourceforge.pinyin4j.*; importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType; importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; ? public?class?Chinese2PY { public?static?void?main(String[]?args) { Hanyu?hanyu?=?new?Hanyu(); //?中英文混合的一段文字 String?str?=?"荊溪白石出,Hello?天寒紅葉稀。Android?山路元無雨,What's?up??空翠濕人衣。"; String?strPinyin?=?hanyu.getStringPinYin(str); System.out.println(strPinyin); } } ? class?Hanyu { private?HanyuPinyinOutputFormat?format?=?null; private?String[]?pinyin; ? public?Hanyu() { format?=?new?HanyuPinyinOutputFormat(); format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); ? pinyin?=?null; } ? //轉換單個字符 public?String?getCharacterPinYin(char?c) { try { pinyin?=?PinyinHelper.toHanyuPinyinStringArray(c,?format); } catch(BadHanyuPinyinOutputFormatCombination?e) { e.printStackTrace(); } ? //?如果c不是漢字,toHanyuPinyinStringArray會返回null if(pinyin?==?null)?return?null; ? //?只取一個發音,如果是多音字,僅取第一個發音 return?pinyin[0]; } ? //轉換一個字符串 public?String?getStringPinYin(String?str) { StringBuilder?sb?=?new?StringBuilder(); String?tempPinyin?=?null; for(int?i?=?0;?i?<?str.length();?++i) { tempPinyin?=getCharacterPinYin(str.charAt(i)); if(tempPinyin?==?null) { //?如果str.charAt(i)非漢字,則保持原樣 sb.append(str.charAt(i)); } else { sb.append(tempPinyin); } } return?sb.toString(); } }
轉載于:https://www.cnblogs.com/super-admin/p/8303633.html
總結
以上是生活随笔為你收集整理的zbb20180117 汉字转拼音 pinyin4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: esp8266对接天猫精灵 微信控制
- 下一篇: 5-全排列总结: