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

