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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載
這篇文章主要為大家詳細(xì)介紹了如何利用ssh實(shí)現(xiàn)服務(wù)器文件上傳下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
springsecurity實(shí)現(xiàn)攔截器的使用示例
Spring Security 可以替代攔截器,同時(shí)還可以提供更加細(xì)粒度的權(quán)限控制和身份認(rèn)證,本文就來介紹一下springsecurity實(shí)現(xiàn)攔截器的使用示例,感興趣的可以了解一下2023-10-10
MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問題
這篇文章主要介紹了MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
基于Springboot一個(gè)注解搞定數(shù)據(jù)字典的實(shí)踐方案
這篇文章主要介紹了基于Springboot一個(gè)注解搞定數(shù)據(jù)字典問題,大致的方向是自定義注解,在序列化的時(shí)候進(jìn)行數(shù)據(jù)處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
springboot+springsecurity如何實(shí)現(xiàn)動(dòng)態(tài)url細(xì)粒度權(quán)限認(rèn)證
這篇文章主要介紹了springboot+springsecurity如何實(shí)現(xiàn)動(dòng)態(tài)url細(xì)粒度權(quán)限認(rèn)證的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
MybatisPlus中插入數(shù)據(jù)后獲取該對象主鍵值的實(shí)現(xiàn)
這篇文章主要介紹了MybatisPlus中插入數(shù)據(jù)后獲取該對象主鍵值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
JAVA時(shí)間存儲(chǔ)類Period和Duration使用詳解
這篇文章主要為大家介紹了JAVA時(shí)間存儲(chǔ)類Period和Duration使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
解決maven父子工程install的時(shí)候排除某些子模塊,讓子模塊不install問題
在Maven父子工程中,如果希望某個(gè)子模塊不被安裝到本地倉庫,可以在該子模塊的`pom.xml`文件中添加以下配置: ```xml ... org.apache.maven.plugins maven-install-plugin 2.5.2 true2024-12-12

