Java使用MessageFormat應(yīng)注意的問題
問題現(xiàn)象
某個業(yè)務(wù)功能需要通過SSH協(xié)議執(zhí)行命令查詢一些數(shù)據(jù),而某次查詢居然沒有得到任何結(jié)果,導(dǎo)致界面沒有任何數(shù)據(jù),但是手動執(zhí)行這個命令又是能夠查詢到數(shù)據(jù)的。刨了半天日志也確實(shí)沒有看到日志里面有什么異常的信息,百思不得其解數(shù)據(jù)究竟去哪里了???
問題排查
看了一段時間還是沒有什么頭緒,這個時候內(nèi)心開始慌了。趕緊看了一下提交記錄,確認(rèn)了一下代碼不是我寫的,于是心里稍稍微淡定了一點(diǎn),別人問起也好說不是我寫的嘛!雖然代碼不是我寫的,但是問題還是要繼續(xù)看的。畢竟拿了錢,就要干活的嘛。
接下來就只能分析代碼了。首先分析了一下最有可能出錯的地方,就是解析命令查詢的響應(yīng)邏輯。把這個地方的代碼和手動執(zhí)行命令得到的結(jié)果放在一起分析,發(fā)現(xiàn)根據(jù)這個響應(yīng)結(jié)果是能夠正常的得到響應(yīng)結(jié)果的。看了一會兒也確實(shí)沒有發(fā)現(xiàn)問題,又去看了一下命令拼接的代碼,拼接的邏輯就一行,應(yīng)該是不會出問題的。沒辦法了,又去看了看日志,這個時候發(fā)現(xiàn)日志里面有打印發(fā)送執(zhí)行的命令。定睛一看,我擦,咋多了個逗號呢?又揉了揉眼鏡,確認(rèn)自己沒有看錯誤。
這個時候再回去看一下代碼,怎么看這個 MessageFormat
都有點(diǎn)問題,但是一時又找不到啥證據(jù)。
public Integer getMaxIndex() { ? ?// 返回最大的索引值 1035 } public String queyBySsh() { ? ?// 這里期望拼接的命令是 show index 1035,但是實(shí)際的命令卻是 show index 1,035 ? ?// 最終得到的命令多了個英文的逗號 ? ?String command = MessageFormat("show index {0}", getMaxIndex()); ? ?// 通過SSH執(zhí)行這個命令查詢 }
后來突然想起來之前看到過的一個Wiki,好像有關(guān)于描述 MessageFormat
的注意事項(xiàng)。趕緊去找來看一下,果然里面有寫到當(dāng) MessageFormat
的參數(shù)是數(shù)字類型時,當(dāng)數(shù)字超過 3 位數(shù)字以上時,每隔 3 位會多增加一個因?yàn)榈亩禾枴K愿鶕?jù)上面的代碼邏輯得到的就是 show index 1,035
了,結(jié)果中多了個英文的逗號,而將這個拼接出來的命令手動執(zhí)行是查不出來數(shù)據(jù)的。終于破案了,撒花,撒花,撒花?。。?/p>
如何解決
第一種方法是將數(shù)字轉(zhuǎn)為字符串,然后再進(jìn)行格式化,將上面的代碼修改為如下:
public String queyBySsh() { ? ?// 這里拼接的時候先調(diào)用一下 String.valueOf() 方法 ? ?String command = MessageFormat("show index {0}", String.valueOf(getMaxIndex())); }
第二種方法是增加 MessageFormat
的 FormatStyle
,將上面的代碼修改為如下:
public String queyBySsh() { // 這里的 # 就是定義的 FamatStyle String command = MessageFormat("show index {0, number, #}", getMaxIndex()); }
到此這篇關(guān)于Java使用MessageFormat應(yīng)注意的問題的文章就介紹到這了,更多相關(guān)Java MessageFormat 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MybatisPlus實(shí)現(xiàn)邏輯刪除功能
這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)邏輯刪除功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Sharding JDBC讀寫分離實(shí)現(xiàn)原理及實(shí)例
這篇文章主要介紹了Sharding JDBC讀寫分離實(shí)現(xiàn)原理及實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12Java調(diào)用ChatGPT的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java調(diào)用ChatGPT的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02Spring源碼解析之循環(huán)依賴的實(shí)現(xiàn)流程
這篇文章主要介紹了Spring源碼解析之循環(huán)依賴的實(shí)現(xiàn)流程,文章基于Java的相關(guān)內(nèi)容展開循環(huán)依賴的實(shí)現(xiàn)流程,需要的小伙伴可以參考一下2022-07-07Spring Boot 中常用的注解@RequestParam及基本用法
@RequestParam 是 Spring Framework 和 Spring Boot 中常用的注解之一,用于從請求中獲取參數(shù)值,本文給大家介紹Spring Boot 中常用的注解@RequestParam,感興趣的朋友一起看看吧2023-10-10Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情
這篇文章主要介紹了Java并發(fā)編程之ConcurrentLinkedQueue隊(duì)列詳情,ConcurrentLinkedQueue?內(nèi)部的隊(duì)列使用單向鏈表方式實(shí)現(xiàn),下文更多相關(guān)內(nèi)容敘述需要的小伙伴可以參考一下2022-04-04mybatisPlus實(shí)現(xiàn)倒序拼接字符串
這篇文章主要介紹了mybatisPlus實(shí)現(xiàn)倒序拼接字符串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01