pinyin4j獲取漢字正確的全拼和簡拼
阿新 • • 發佈:2019-02-13
最近公司開發一個專案,需要獲取漢字的拼音然後根據拼音來實現快速搜尋。Java方面有PinYin4j開源專案獲取漢字的拼音,但是對多音字處理的不好,自己研究了一下,終於給解決了。在這裡跟大家分享一下!
工程目錄結構如下
原理:將可能出現的多音字 片語組合起來,用正確拼音當作其key,片語當作value,儲存到一個Map集合中。使用PinYin4j獲取漢字拼音時判斷是否為多音字(返回陣列的長度大於1),如果為多音字,用其拼音去 Map集合中查詢,若有則取當前拼音為正確拼音。若到最後都沒有找到,給其一個預設的拼音。
duoyinzi_dic.txt
a#阿 阿姨 阿富 阿門 阿拉 阿林 黑阿 麥阿密 鹿城阿嶴 阿福 ao#拗口 違拗 凹 ai#艾 艾滋 艾蒿 未艾 bang#膀 翅膀 臂膀 重磅 磅秤 黃泥磅店 蛤蚌 蚌殼 河蚌 鷸蚌 珠蚌 蚌 ba#扒 bai#叔伯 百 百萬 柏 bao#剝皮 薄 超薄 薄脆 薄板 薄餅 暴 暴晒 暴發 暴雨 暴力 風暴 暴露 暴風 漢堡 古堡 地堡 城堡 龍堡 卡斯堡 麻家堡 麥芬堡 漢堡 麥得堡 麥爾堡 曝光 瀑河 beng#蚌埠 bi#復辟 臂 臂章 螳臂 交臂 前臂 一臂 奮臂 膀臂 臂膀 祕魯 泌陽 bing#屏棄 屏氣 屏除 屏退 屏息 bian#扁 扁桃 便 方便 方便麵 便當 便捷 bo#薄 薄荷 單薄 伯 伯仲 伯樂 伯勞 伯父 大伯 老伯 伯母 黃伯 伯爵 停泊 淡泊 尼泊 漂泊 波 鴻波 柏林 bu#大埔 can#參 參謀 參事 總參 引數 參議 參觀 參拜 參股 cang#藏 埋藏 藏頭 祕藏 雪藏 藏匿 收藏 館藏 礦藏 隱藏 蘊藏 藏袍 儲藏 窖藏 藏龍 藏胞 冷藏 珍藏 私藏 藏掖 西藏 藏書 藏品 傖俗 傖 龍藏寺 cen#參差 ceng#曾 不曾 似曾 幾曾 何曾 曾經 曾幾 未曾 噌 噌的 一聲 cha#差 剎那 寶剎 一剎 喳喳 chai#公差 差役 專差 官差 聽差 美差 辦差 差事 差使 肥差 當差 欽差 chan#顫 顫悠 單于 禪 禪學 班禪 禪宗 禪堂 禪門 禪機 禪杖 禪房 禪師 坐禪 參禪 禪院 chang#長 周長 細長 長髮 三長 長河 長袖 長衫 天長 長短 超長 長沙 長春 長遠 長度 長江 長處 長假 長街 長征 全長 長城 波長 身長 長途 長吁 長虹 長方 廠 chao#朝 朝陽 朝陽區 朝鮮 朝廷 王朝 歷朝 解嘲 譏嘲 自嘲 嘲笑 嘲弄 冷嘲 嘲諷 綽綽 綽起 綽家 剿襲 剿說 che#車 汽車 停車場 車車 黑車 車飾 chen#稱職 勻稱 稱心 相稱 對稱 cheng#稱 職稱 簡稱 總稱 官稱 代稱 稱號 稱謂 暱稱 謙稱 全稱 名稱 乘 噌吰 澄 chu#六畜 家畜 耕畜 畜生 牲畜 chui#椎心 chuan#傳 文傳 傳媒 傳銷 傳情 真傳 祖傳 傳聞 傳家 祕傳 傳單 傳說 chi#匙子 茶匙 羹匙 湯匙 尺 尺度 英尺 咫尺 尺碼 公尺 卡尺 米尺 捲尺 chong#重慶 重重 chou#臭 汗臭 臭氧 口臭 腋臭 臭蟲 臭罵 臭美 酸臭 腐臭 臭氣 腥臭 臭名 遺臭 惡臭 臭豆 狐臭 臭味 臭架 chuang#經幢 chuo#綽 綽約 闊綽 綽號 寬綽 ci#參差 伺候 龜茲 cuan#攢錢 攢聚 攢動 cuo#撮兒 撮要 撮合 da#大 大街 沓子 龍大 大西洋 大昌 大聖 福大 黑大 大華 大包 大廈 dao#叨 叨嘮 絮叨 叨唸 叨咕 唸叨 嘮叨 叨叨 磨叨 dai#大夫 dan#單 西單 東單 清單 報單 單利 名單 單姓 單親 單線 單科 單間 單挑 單價 單詞 子彈 de#的 似的 總的 中的 別的 deng#澄清 di#怎的 無的 有的 目的 標的 打的 的確 的當 的士 上地 大地 天地 提防 堤 diao#調 藍調 藍調吧 調調 音調 論調 格調 調令 低調 筆調 基調 強調 聲調 濫調 老調 色調 單調 腔調 跑調 曲調 步調 語調 主調 情調 du#都 都會 國都 都城 古都 故都 大都 首都 成都 舊都 都市 龍都 鼎都 鶴都 鵬都 鴻都 麥度 度 態度 讀書 法度 寬度 進度 dui#堆 dou#全都 句讀 duo#測度 忖度 揣度 猜度 舵 dun#糧囤 頓 e#阿諛 阿膠 阿彌 噁心 er#兒 fan#番 番茄 繁 fo#佛 佛塔 佛徒 佛牙 佛教 fu#彷彿 果脯 fou#否 是否 與否 ga#咖 咖哩 伽馬 gai#蓋 gang#扛鼎 ge#革 革命 皮革 鷹革 蛤蚧 文蛤 蛤蜊 咯吱 咯噔 咯咯 gei#給 geng#脖頸 gong#女紅 gu#谷 布穀 穀物 谷地 矽谷 中鵠 麥谷 麓谷 鷺谷 鼓 gui#龜 龜山 龜士 龜博 龜仔 鹿龜 龜汁 龜苓 龜頂 gua#挺括 頂呱 呱呱 呱唧 呱嗒 呱 guan#綸巾 東莞 guang#廣 廣州 廣東 廣播 ha#蛤蟆 癩蛤 蝦蟆 hai#還是 還有 咳 hao#貉子 貉絨 hang#總行 分行 支行 行業 排行 行情 央行 商行 外行 銀行 商行 酒行 麻行 琴行 巷道 珩 he#和 嘉和 和睦 親和 龍和 之貉 威嚇 恫嚇 恐嚇 鼎和 錦和 麒和苑 合 合資 鴻合 heng#道行 hu#鵠 鵠望 鴻鵠 鵠立 huan#還 鸝還 hui#會 會館 會展 會所 協會 國會 會堂 hong#紅 紅裝 紅牌 紅木 紅人 虹 huo#軟和 熱和 暖和 ji#病革 給養 自給 給水 薪給 給予 供給 稽考 稽查 稽核 滑稽 稽留 緝獲 緝查 緝私 緝捕 狼藉 奇數 亟 亟待 亟須 亟亟 亟需 詰屈 薺菜 jia#雪茄 伽 瑜伽 伽利略 家 jian#見 龍見 jiang#降 降溫 降低 降旗 下降 倔強 jiao#嚼舌 嚼子 細嚼 角 平角 視角 海角 龍角 鹿角 圍剿 征剿 餃 餃子 腳 jie#解 解放 慰藉 蘊藉 盤詰 詰難 詰問 反詰 桔 jin#矜 矜誇 矜持 驕矜 自矜 勁 jing#頸 頸項 頸椎 引頸 長頸 宮頸 瓶頸 龍頸 黑頸鶴 鹿頸 景 景色 帝景 勁鬆 ju#咀 咀嚼 居 桔汁 jun#均 平均 鴻均 juan#棚圈 圈養 jv#咀嚼 趑趄 jvan#豬圈 羊圈 jue#主角 角色 旦角 女角 丑角 角力 名角 配角 咀嚼 覺 直覺 感覺 錯覺 觸覺 幻覺 堀 jun#龜裂 俊 jvn#龜裂 ka#咖啡 卡 磁卡 賀卡 卡拉 胸卡 音效卡 卡片 綠卡 卡通 網絡卡 卡口 龍卡 咯痰 咯血 喀 kang#扛 ke#咳 咳嗽 乾咳 貝殼 蚌殼 外殼 蛋殼 腦殼 彈殼 keng#吭聲 吭氣 吭哧 kuai#會計 財會 kuo#括 la#癩痢 臘 lai#癩瘡 癩子 癩蛤 癩皮 lao#積潦 絡子 落枕 落價 麻粩 le#樂 娛樂 玩樂 樂趣 美樂 樂緣 勒 了 lei#勒緊 lo#然咯 lou#佝僂 long#里弄 弄堂 瀧 li#禮 豊 櫟 liao#瞭解 了結 明瞭 了得 末了 未了 瞭如 瞭如指掌 潦草 潦倒 liang#靚 liu#碌碡 碌碌 勞碌 忙碌 庸碌 六 lu#綠林 碌 luo#絡 絡腮 落 部落 落花 日落 lv#率 頻率 機率 比率 效率 勝率 概率 匯率 功率 倍率 綠 綠葉 淡綠 綠色 綠豆 傴僂 綠洲 lun#丙綸 錦綸 經綸 滌綸 mai#埋 man#埋怨 蔓 mai#脈 山脈 動脈 命脈 筋脈 脈象 氣脈 脈動 脈息 脈絡 一脈 經脈 mang#氓 流氓 me#黛麼 meng#群氓 盟 mei#沒 mo#埋沒 隱沒 脈脈 模 航模 模糊 男模 楷模 規模 勞模 模型 模範 模特 名模 摩 麼 麼 麼 mou#綢繆 mi#祕 祕密 祕方 奧祕 神祕 泌尿 分泌 miu#謬 謬論 紕繆 mu#人模 字模 模板 模樣 模具 裝模 裝模做樣 模子 na#哪 娜 安娜 娜娜 麗娜 黛爾娜 黛娜 海娜 黑娜 黃麗娜 麥香娜 優娜 麥娜 麟娜 那 nan#南 南方 湖南 ne#哪吒 呢 nong#弄 ni#毛呢 花呢 呢絨 線呢 呢料 呢子 呢喃 溺 niao#便溺 尿 nian#粘 niu#執拗 拗不 nue#瘧 瘧疾 nuo#婀娜 嫋娜 nv#女 女人 nve#瘧原 瘧蚊 pa#扒 pai#迫擊 迫擊炮 派 pao#刨 炮 pang#膀胱 膀腫 磅礴 pi#否極 臧否 龍陂 黃陂 pian#扁舟 便宜 piao#樸姓 ping#屏 螢幕 熒屏 銀屏 po#泊 迫 朴刀 坡 陂 pu#暴十 一曝十寒 裡堡 十里堡 胸脯 肉脯 脯子 杏脯 簡樸 樸質 古樸 樸厚 純樸 樸素 誠樸 儉樸 樸實 淳樸 曝晒 瀑布 飛瀑 埔 黃埔 qiu#龜茲 qi#稽首 緝鞋 棲 奇 奇妙 傳奇 亟來 荸薺 蹊蹺 林棲 鹿奇 鷺奇 漆 齊 齊天大聖 齊天 其 qia#卡脖 卡子 關卡 卡殼 哨卡 邊卡 髮卡 qiao#雀盲 雀子 地殼 甲殼 軀殼 qian#纖手 拉縴 縴夫 纖繩 乾 qiang#強顏 強人 自強 強烈 強風 強大 黎強 麒強 鶴強 龔強 qie#茄子 顛茄 番茄 趔趄 qin#親 親和 親親 棘矜 矜鋤 qing#乾親 親家 黥 qu#區 小區 quan#轉圈 鋼圈 圓圈 羅圈 弧圈 墊圈 小圈 眼圈 que#雀 麻雀 鳥雀 燕雀 孔雀 雲雀 雀巢、 re#般若 ruo#若 sai#塞 麥迪塞姆 活塞 se#堵塞 搪塞 茅塞 閉塞 鼻塞 梗塞 阻塞 淤塞 擁塞 哽塞 月色 彩色 特色 深色 聲色 黛色 黛色 黑色瞳 色坊 sha#剎車 急剎 急剎車 廈 廣廈 大廈 商廈 鷹大廈 莎 shai#色子 shan#姓單 單縣 杉 鐵杉 杉樹 封禪 禪讓 黒杉 柵 shang#裳 衣裳 she#拾級 折本 shen#沙蔘 野參 參王 人蔘 紅參 丹蔘 山參 海蔘 刺蔘 沒什 什麼 為什 鹿參 身 sheng#野乘 千乘 史乘 省 晟 盛 盛大 鴻盛 shi#鑰匙 拾荒 撿拾 拾物 傢什 什物 什錦 麻什 麥什 喀什 牛什 識 見識 知識 似的 骨殖 食 飲食 副食 石 石業 石頭 石藝 氏 姓氏 上柵 下柵 shuai#表率 率性 率直 率真 粗率 率領 輕率 直率 草率 大率 坦率 數字 招數 基數 數碼 shuang#瀧水 shu#屬 金屬 氣數 歲數 度數 資料 級數 數控 數學 引數 次數 正數 代數 實數 係數 分數 輩數 shui#遊說 shuo#數見 數見不鮮 傳說 聽說 妄說 實說 胡說 評說 分說 小說 si#窺伺 伺弄 伺機 疑似 似是 好似 似曾 形似 酷似 貌似 似懂 勝似 恰似 近似 神似 賽似 看似 活似 強似 似乎 類似 相似 思 su#宿主 宿命 歸宿 住宿 借宿 寄宿 宿營 夜宿 露宿 投宿 宿舍 名宿 整宿 食宿 sui#尿泡 ta#拓本 拓片 碑拓 疲沓 拖沓 雜沓 沓 塔 鴻塔 tang#湯 鴨湯 雞湯 tao#叨擾 叨光 陶 陶器 tan#彈性 彈力 反彈 ti#手提 提速 提意 提前 提早 提升 提議 提款 提婚 提包 耳提 提供 麥麥提 體 tiao#空調 調教 烹調 調羹 調料 調皮 調控 調節 調整 調價 諧調 協調 調色 調侃 調味 失調 調治 調頻 調劑 調停 調休 調解 ting#町 域町 聽 tong#垌 tui#褪色 褪毛 tuo#拓 拓寬 拓荒 開拓 落拓 拓展 拓印 tun#屯 囤積 囤聚 wei#尾 響尾 尾巴 尾燈 船尾 追尾 尾椎 月尾 燕尾 尾數 年尾 歲尾 鳶尾 鳳尾 彗尾 尾翼 結尾 遺之 龍尾 齊鑫尾 麻尾 麥度 鹿尾 wu#可惡 交惡 好惡 厭惡 憎惡 嫌惡 痛惡 深惡 wan#藤蔓 枝蔓 瓜蔓 蔓兒 莞爾 萬 百萬 萬 xia#蝦 蝦仁 青蝦 大蝦 蝦皮 對蝦 蝦子 蝦醬 蝦兵 蝦米 龍蝦 噶廈 廈門 嚇唬 嚇人 驚嚇 天蝦 龍蝦 皮皮蝦 麥蝦 xi#棲棲 系 關係 星系 水系 繫念 體系 聯絡 系列 菜系 世系 蹊 蹊徑 溪 洗 xiao#校 學校 切削 削麵 刀削 刮削 xian#纖細 光纖 纖巧 纖柔 纖小 纖維 纖瘦 纖纖 化纖 纖秀 棉纖 纖塵 xiang#巷 街巷 僻巷 巷子 龍門巷 六巷 龍灣巷 龍港巷 龍泉巷 龍巷 龍妙巷 齡巷 齊家巷 鼓樓巷 鼓巷 黎明巷 麻子巷 麻園巷 麥子巷 鵲巷 xie#解數 出血 採血 換血 血糊 尿血 淤血 放血 血暈 血淋 便血 吐血 咯血 叶韻 蠍 蠍子 xiu#銅臭 乳臭 成宿 星宿 xin#馨 信 鴻信 xing#深省 省視 內省 不省人事 省悟 省察 行 旅行 例行 行程 行樂 龍行 人行 流行 先行 行星 品行 發行 行政 風行 龍行 龍行 麟行 xu#牧畜 畜產 畜牧 畜養 籲 氣籲 喘籲 吁吁 麥埂圩 xue#削 削減 削弱 削瘦 削球 削平 削價 瘦削 剝削 削職 刪削 削肩 血 吸血 xun#蕁 蕁麻 蕁麻疹 ya#芽 yao#發瘧 瘧子 約斤 稱約 鑰匙 金鑰 耀 yan#吞嚥 嚥氣 咽喉 殷紅 醃 醃製 醃肉 醃菜 煙 菸草 名煙 菸酒 ye#抽咽 哽咽 咽炎 下嚥 嗚咽 幽咽 悲咽 葉 綠葉 葉子 荷葉 落葉 菜葉 紅葉 樹葉 楓葉 茶葉 葉 鴻葉 液 yi#自艾 懲艾 後尾 遺 屹 yin#殷 殷勤 殷墟 殷切 殷鑑 yo#杭育 yu#谷渾 呼籲 籲請 籲求 育 體育 教育 育兒 熨帖 熨燙 於 yuan#員 yun#熨 熨斗 電熨斗 yue#樂音 器樂 樂律 樂章 音樂 樂理 民樂 樂隊 聲樂 奏樂 絃樂 樂壇 管樂 配樂 樂曲 樂譜 鎖鑰 金鑰 樂團 鼓樂社 樂器 櫟陽 約 約會 zan#積攢 zang#寶藏 藏曆 藏文 藏香 藏語 藏青 藏族 藏醫 藏戲 藏藥 藏藍 蔵 ze#擇 擇善 zeng#曾孫 曾祖 za#綁紮 結紮 包紮 捆紮 zai#牛仔 龜仔 龍仔 鼻仔 羊仔 仔仔 麻仔 麵包仔 麥旺仔 鴻仔 煲仔 福仔 zha#扎 馬紮 掙扎 扎啤 紮根 扎手 扎針 扎花 扎堆 紮營 紮實 穩紮 柞水 麻扎鎮 麻扎鄉 喳 柵欄 zhai#擇菜 zhan#不粘 貼上 粘連 zhao#朝朝 明朝 朝暉 朝夕 朝思 有朝 今朝 朝氣 朝三 朝秦 朝霞 鷹爪 龍爪 魔爪 爪牙 失著 著數 龍爪槐 zhe#折 破折 打折 疊 曲折 折衝 存摺 摺合 折舊 摺紙 骨折 折返 折價 折算 波折 摺扇 對摺 不折 折扣 七折 折中 拙著 要著 著文 新著 著 本著 對著 zhi#標識 嘎吱 咯吱 吱扭 吱吱 繁殖 增殖 養 生殖 殖民 枝 zhong#重 重量 鵬重 種 zhou#粥 zhu#屬意 著錄 撰著 名著 專著 著述 著作 顯著 昭著 原著 著名 著書 遺著 論著 著者 編著 卓著 譯著 著稱 zhua#爪 zhui#椎 椎骨 尾椎 椎間 腰椎 胸椎 頸椎 脊椎 zhuo#執著 著裝 著落 著意 著力 附著 著筆 膠著 著手 著重 穿著 衣著 執著 著眼 著墨 著實 沉著 著陸 著想 著色 zhuang#幢房 一幢 幢樓 zi#吱聲 茲 來茲 今茲 仔細 仔豬 zu#足 沐足 足道 zuo#撮毛 小撮 柞綢 柞蠶 柞樹 柞木 zui#咀脣 尖沙咀 黃達咀 黃土咀 鷹咀
ChineseToHanYuPYTest類
package com.yulore.pinyin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; 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; /** * 漢字轉拼音,能處理多音字 * * @author feng bingbing * */ public class ChineseToHanYuPYTest { private static Map<String, List<String>> pinyinMap = new HashMap<String, List<String>>(); private static long count = 0; public static void main(String[] args) { String str = "中國銀行長沙分行"; // String str = "龍港巷店"; initPinyin("/duoyinzi_dic.txt"); String py = convertChineseToPinyin(str); System.out.println(str+" = "+py); } /** * 將某個字串的首字母 大寫 * @param str * @return */ public static String convertInitialToUpperCase(String str){ if(str==null){ return null; } StringBuffer sb = new StringBuffer(); char[] arr = str.toCharArray(); for(int i=0;i<arr.length;i++){ char ch = arr[i]; if(i==0){ sb.append(String.valueOf(ch).toUpperCase()); }else{ sb.append(ch); } } return sb.toString(); } /** * 漢字轉拼音 最大匹配優先 * @param chinese * @return */ private static String convertChineseToPinyin(String chinese) { StringBuffer pinyin = new StringBuffer(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); char[] arr = chinese.toCharArray(); for (int i = 0; i < arr.length; i++) { char ch = arr[i]; if (ch > 128) { // 非ASCII碼 // 取得當前漢字的所有全拼 try { String[] results = PinyinHelper.toHanyuPinyinStringArray( ch, defaultFormat); if (results == null) { //非中文 return ""; } else { int len = results.length; if (len == 1) { // 不是多音字 // pinyin.append(results[0]); String py = results[0]; if(py.contains("u:")){ //過濾 u: py = py.replace("u:", "v"); System.out.println("filter u:"+py); } pinyin.append(convertInitialToUpperCase(py)); }else if(results[0].equals(results[1])){ //非多音字 有多個音,取第一個 // pinyin.append(results[0]); pinyin.append(convertInitialToUpperCase(results[0])); }else { // 多音字 System.out.println("多音字:"+ch); int length = chinese.length(); boolean flag = false; String s = null; List<String> keyList =null; for (int x = 0; x < len; x++) { String py = results[x]; if(py.contains("u:")){ //過濾 u: py = py.replace("u:", "v"); System.out.println("filter u:"+py); } keyList = pinyinMap.get(py); if (i + 3 <= length) { //後向匹配2個漢字 大西洋 s = chinese.substring(i, i + 3); if (keyList != null && (keyList.contains(s))) { // if (value != null && value.contains(s)) { System.out.println("last 2 > " + py); // pinyin.append(results[x]); pinyin.append(convertInitialToUpperCase(py)); flag = true; break; } } if (i + 2 <= length) { //後向匹配 1個漢字 大西 s = chinese.substring(i, i + 2); if (keyList != null && (keyList.contains(s))) { System.out.println("last 1 > " + py); // pinyin.append(results[x]); pinyin.append(convertInitialToUpperCase(py)); flag = true; break; } } if ((i - 2 >= 0) && (i+1<=length)) { // 前向匹配2個漢字 龍固大 s = chinese.substring(i - 2, i+1); if (keyList != null && (keyList.contains(s))) { System.out.println("before 2 < " + py); // pinyin.append(results[x]); pinyin.append(convertInitialToUpperCase(py)); flag = true; break; } } if ((i - 1 >= 0) && (i+1<=length)) { // 前向匹配1個漢字 固大 s = chinese.substring(i - 1, i+1); if (keyList != null && (keyList.contains(s))) { System.out.println("before 1 < " + py); // pinyin.append(results[x]); pinyin.append(convertInitialToUpperCase(py)); flag = true; break; } } if ((i - 1 >= 0) && (i+2<=length)) { //前向1個,後向1個 固大西 s = chinese.substring(i - 1, i+2); if (keyList != null && (keyList.contains(s))) { System.out.println("before last 1 <> " + py); // pinyin.append(results[x]); pinyin.append(convertInitialToUpperCase(py)); flag = true; break; } } } if (!flag) { //都沒有找到,匹配預設的 讀音 大 s = String.valueOf(ch); for (int x = 0; x < len; x++) { String py = results[x]; if(py.contains("u:")){ //過濾 u: py = py.replace("u:", "v"); System.out.println("filter u:"); } keyList = pinyinMap.get(py); if (keyList != null && (keyList.contains(s))) { System.out.println("default = " + py); // pinyin.append(results[x]); //如果不需要拼音首字母大寫 ,直接返回即可 pinyin.append(convertInitialToUpperCase(py));//拼音首字母 大寫 break; } } } } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else { pinyin.append(arr[i]); } } return pinyin.toString(); } /** * 初始化 所有的多音字片語 * * @param fileName */ public static void initPinyin(String fileName) { // 讀取多音字的全部拼音表; InputStream file = PinyinHelper.class.getResourceAsStream(fileName); BufferedReader br = new BufferedReader(new InputStreamReader(file)); String s = null; try { while ((s = br.readLine()) != null) { if (s != null) { String[] arr = s.split("#"); String pinyin = arr[0]; String chinese = arr[1]; if(chinese!=null){ String[] strs = chinese.split(" "); List<String> list = Arrays.asList(strs); pinyinMap.put(pinyin, list); } } } } catch (IOException e) { e.printStackTrace(); }finally{ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } }
執行結果
多音字:行
before 1 < hang
多音字:長
last 1 > chang
多音字:行
before 1 < hang
中國銀行長沙分行 = ZhongGuoYinHangChangShaFenHang
OK,搞定啦!!!