日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【java】中文转拼音遇到的奇葩事件

發(fā)布時(shí)間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【java】中文转拼音遇到的奇葩事件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

公司線上業(yè)務(wù)有報(bào)錯(cuò),截圖找不到了。總之,就是有些生僻字,用pinyin4這個(gè)工具包是找不到的,然后拋出空指針。

時(shí)間線

  • 生僻字無法轉(zhuǎn)換拼音,說起來也是非常無語的。第一反應(yīng)是升級(jí)工具包吧,拼音翻譯的工具包升級(jí)應(yīng)該也就是為了規(guī)避生僻字吧,于是吧maven升級(jí)了一下。但是發(fā)現(xiàn)..并沒有用。
  • 沒用那就看看文檔嘍,對(duì)比了好多轉(zhuǎn)換拼音的工具包。emm 找到鏈接后補(bǔ)充吧,總之是經(jīng)過多方對(duì)比,發(fā)現(xiàn)jpinyin很好。
  • 還有一點(diǎn)就是對(duì)于無法找到拼音的漢字,會(huì)直接返回本字體,起碼不會(huì)報(bào)錯(cuò)。于是更改了工具包,重新引入。又外掛了本項(xiàng)目路徑下的字典,添加了日志中發(fā)現(xiàn)的特別的字。

  • 代碼提交后,組長覺得有問題.. 因?yàn)樗戳?jpinyin和pinyin4的github,發(fā)現(xiàn)jpinyin的star數(shù)過低..認(rèn)為風(fēng)險(xiǎn)很大..說兩個(gè)都查才是最好的.. 怪我,我沒有把對(duì)比的方案寫出來(不過寫出來好像也沒啥用。
  • 后來想想還是算了,我又改回了原有的pinyin4,更改了原來的代碼,實(shí)在找不到再用jpinyin找一下. okok. 再原有邏輯下,又添加了外掛字典。不是很懂為啥要這么復(fù)雜..
  • 請(qǐng)記住外掛了字典,接下來戲劇開始了..

    static {MultiPinyinConfig.multiPinyinPath= Objects.requireNonNull(ChineseToSpellManagerImpl.class.getClassLoader().getResource("userPinyin.txt")).getPath(); }
  • 發(fā)到測試環(huán)境,沒有翻譯成功,沒有找到對(duì)應(yīng)的拼音。直接更新的是原有漢字。考慮沒有讀取到外掛文件。
  • 我們的項(xiàng)目用的是dropwized,這個(gè)框架,蠻特別的,可以看下此文章介紹。
  • Dropwizard框架入門 - 云+社區(qū) - 騰訊云

    我們的項(xiàng)目是部署在docker容器中的,目前的流程是dropwized會(huì)打包jar,然后docker拉取鏡像,然后進(jìn)行部署啟動(dòng)。再此過程中,找不到文件是很很正常的,因?yàn)槿萜髦胁]有文件路徑。于是參考了下文章去想辦法在容器中添加目錄,掛載文件。

    docker下讀取txt文件找不到路徑,必須copy到容器或者映射文件 - 代碼先鋒網(wǎng)

  • 找到了運(yùn)維,他是一次次的加路徑改項(xiàng)目,最后找到了文件,也可以按照我的想法執(zhí)行,但是發(fā)現(xiàn)致命的問題。
  • 項(xiàng)目應(yīng)用過多,若用docker掛載,需要在每個(gè)應(yīng)用配置文件添加,日后還會(huì)私有化部署,這個(gè)很不友好。
  • 現(xiàn)在公司還沒有文件管理器,但凡要是加一個(gè)字在字典中,那就每個(gè)文件都加吧..
  • 基于以上的問題,又想到可以在jar包里面直接讀取,不通過docker,在jar中讀取文件,然后寫到一個(gè)虛擬路徑文件中,最后把路徑交給工具包解析。于是就有了下面的代碼
  • static {MultiPinyinConfig.multiPinyinPath = System.getProperty("user.dir") + "/config/userPinyin.txt";String line;BufferedReader br = new BufferedReader(new InputStreamReader(Objects.requireNonNull(ChineseToSpellManagerImpl.class.getClassLoader().getResourceAsStream("userPinyin.txt"))));try (PrintWriter pw = new PrintWriter(new FileOutputStream(MultiPinyinConfig.multiPinyinPath))) {while ((line = br.readLine()) != null) {pw.println(line);}} catch (IOException e) {log.error("ChineseToSpellManager read file error.{}.", e.getMessage(), e);} finally {try {br.close();} catch (IOException e) {log.error("ChineseToSpellManager BufferedReader error.{}.", e.getMessage(), e);}} }

    本地測試通過,再次提交測試環(huán)境。然后maven打包過不去了.. 剛開始是認(rèn)為自己pom文件寫的不規(guī)范,怎么也找不到原因。

    本地打包,還是不行,然后按照提示找用了findbug命令。

    這個(gè)findbug工具包是指在項(xiàng)目打包的時(shí)候,會(huì)檢測是潛在的風(fēng)險(xiǎn)點(diǎn)。

    使用指令后,打包彈窗如下:

    最后發(fā)現(xiàn): 項(xiàng)目再打包時(shí)候,會(huì)運(yùn)行static加載類文件。。因?yàn)樽址霓D(zhuǎn)換,沒有寫標(biāo)準(zhǔn)的字符。。😭😭😭

    static {MultiPinyinConfig.multiPinyinPath = System.getProperty("user.dir") + "/config/userPinyin.txt";String line;BufferedReader br = new BufferedReader(new InputStreamReader(Objects.requireNonNull(ChineseToSpellManagerImpl.class.getClassLoader().getResourceAsStream("userPinyin.txt")), StandardCharsets.UTF_8));try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(MultiPinyinConfig.multiPinyinPath),StandardCharsets.UTF_8))) {while ((line = br.readLine()) != null) {pw.println(line);}} catch (IOException e) {log.error("ChineseToSpellManager read file error.{}.", e.getMessage(), e);} finally {try {br.close();} catch (IOException e) {log.error("ChineseToSpellManager BufferedReader error.{}.", e.getMessage(), e);}} }
  • 最后再次發(fā)版。再次發(fā)版讀拼音!測試發(fā)現(xiàn),還是找不到路徑,根本就寫到容器中的文件。 行,很行了。
  • 最后服了,不掛文件了,自己弄了一個(gè)枚舉做字典,然后查枚舉中拼音漢字,讀吧..
  • //生僻字字典,可自行在枚舉中添加 //目前數(shù)量少,量大可考慮添加緩存中 private static final Map<Character,String> initMap = ChinesePinEnum.readPinYinMap();

    思考

  • 不管多簡單的事,也要輸出各種文檔對(duì)比,不然會(huì)被質(zhì)疑。
  • 要心平氣和的面對(duì)每一次失敗,發(fā)散思維方式,不要轉(zhuǎn)牛角尖。docker掛在上,過于執(zhí)著了,還好有個(gè)身邊有人提醒換了方向。
  • 代碼是最誠實(shí)的。👌
  • 本地石墨寫的地址:

    https://shimo.im/docs/NJkbEgYPm2c75bqR/ 《中文轉(zhuǎn)換拼音》,可復(fù)制鏈接后用石墨文檔 App 或小程序打開

    總結(jié)

    以上是生活随笔為你收集整理的【java】中文转拼音遇到的奇葩事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。