Java使用MessageFormat應注意的問題
問題現(xiàn)象
某個業(yè)務功能需要通過SSH協(xié)議執(zhí)行命令查詢一些數(shù)據(jù),而某次查詢居然沒有得到任何結果,導致界面沒有任何數(shù)據(jù),但是手動執(zhí)行這個命令又是能夠查詢到數(shù)據(jù)的。刨了半天日志也確實沒有看到日志里面有什么異常的信息,百思不得其解數(shù)據(jù)究竟去哪里了???
問題排查
看了一段時間還是沒有什么頭緒,這個時候內(nèi)心開始慌了。趕緊看了一下提交記錄,確認了一下代碼不是我寫的,于是心里稍稍微淡定了一點,別人問起也好說不是我寫的嘛!雖然代碼不是我寫的,但是問題還是要繼續(xù)看的。畢竟拿了錢,就要干活的嘛。
接下來就只能分析代碼了。首先分析了一下最有可能出錯的地方,就是解析命令查詢的響應邏輯。把這個地方的代碼和手動執(zhí)行命令得到的結果放在一起分析,發(fā)現(xiàn)根據(jù)這個響應結果是能夠正常的得到響應結果的??戳艘粫阂泊_實沒有發(fā)現(xiàn)問題,又去看了一下命令拼接的代碼,拼接的邏輯就一行,應該是不會出問題的。沒辦法了,又去看了看日志,這個時候發(fā)現(xiàn)日志里面有打印發(fā)送執(zhí)行的命令。定睛一看,我擦,咋多了個逗號呢?又揉了揉眼鏡,確認自己沒有看錯誤。
這個時候再回去看一下代碼,怎么看這個 MessageFormat 都有點問題,但是一時又找不到啥證據(jù)。
public Integer getMaxIndex() {
? ?// 返回最大的索引值 1035
}
public String queyBySsh() {
? ?// 這里期望拼接的命令是 show index 1035,但是實際的命令卻是 show index 1,035
? ?// 最終得到的命令多了個英文的逗號
? ?String command = MessageFormat("show index {0}", getMaxIndex());
? ?// 通過SSH執(zhí)行這個命令查詢
}后來突然想起來之前看到過的一個Wiki,好像有關于描述 MessageFormat 的注意事項。趕緊去找來看一下,果然里面有寫到當 MessageFormat 的參數(shù)是數(shù)字類型時,當數(shù)字超過 3 位數(shù)字以上時,每隔 3 位會多增加一個因為的逗號。所以根據(jù)上面的代碼邏輯得到的就是 show index 1,035 了,結果中多了個英文的逗號,而將這個拼接出來的命令手動執(zhí)行是查不出來數(shù)據(jù)的。終于破案了,撒花,撒花,撒花?。?!
如何解決
第一種方法是將數(shù)字轉為字符串,然后再進行格式化,將上面的代碼修改為如下:
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());
}到此這篇關于Java使用MessageFormat應注意的問題的文章就介紹到這了,更多相關Java MessageFormat 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springsecurity實現(xiàn)攔截器的使用示例
Spring Security 可以替代攔截器,同時還可以提供更加細粒度的權限控制和身份認證,本文就來介紹一下springsecurity實現(xiàn)攔截器的使用示例,感興趣的可以了解一下2023-10-10
MyBatis之foreach標簽的用法及多種循環(huán)問題
這篇文章主要介紹了MyBatis之foreach標簽的用法及多種循環(huán)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
基于Springboot一個注解搞定數(shù)據(jù)字典的實踐方案
這篇文章主要介紹了基于Springboot一個注解搞定數(shù)據(jù)字典問題,大致的方向是自定義注解,在序列化的時候進行數(shù)據(jù)處理,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
springboot+springsecurity如何實現(xiàn)動態(tài)url細粒度權限認證
這篇文章主要介紹了springboot+springsecurity如何實現(xiàn)動態(tài)url細粒度權限認證的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
MybatisPlus中插入數(shù)據(jù)后獲取該對象主鍵值的實現(xiàn)
這篇文章主要介紹了MybatisPlus中插入數(shù)據(jù)后獲取該對象主鍵值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
解決maven父子工程install的時候排除某些子模塊,讓子模塊不install問題
在Maven父子工程中,如果希望某個子模塊不被安裝到本地倉庫,可以在該子模塊的`pom.xml`文件中添加以下配置: ```xml ... org.apache.maven.plugins maven-install-plugin 2.5.2 true2024-12-12

