看了一段時間還是沒有什麼頭緒,這個時候內心開始慌了。趕緊看了一下提交紀錄,確認了一下程式碼不是我寫的,於是心裡稍微淡定了一點,別人問起也好說不是我寫的嘛!雖然程式碼不是我寫的,但是問題還是要繼續看的。畢竟拿了錢,就要工作的嘛。
接下來就只能分析程式碼了。首先分析了一下最有可能出錯的地方,就是解析指令查詢的回應邏輯。把這個地方的程式碼和手動執行指令得到的結果放在一起分析,發現根據這個回應結果是能夠正常的得到回應結果的。看了一會兒也確實沒有發現問題,又去看了一下指令拼接的程式碼,拼接的邏輯就一行,應該是不會出問題的。沒辦法了,又去看了看日誌,這時候發現日誌裡面有列印發送執行的指令。定睛一看,我擦,咋多了個逗號呢?又揉了揉眼鏡,確認自己沒有看錯誤。
這時候再回去看程式碼,怎麼看這個 MessageFormat
都有點問題,但是一時又找不到啥證據。
public Integer getMaxIndex() { // 返回最大的索引值 1035 } public String queyBySsh() { // 这里期望拼接的命令是 show index 1035,但是实际的命令却是 show index 1,035 // 最终得到的命令多了个英文的逗号 String command = MessageFormat("show index {0}", getMaxIndex()); // 通过SSH执行这个命令查询 }
後來突然想起來之前看過的一個Wiki,好像有關於描述 MessageFormat
的注意事項。趕緊去找來看一下,果然裡面有寫到當 MessageFormat
的參數是數字類型時,當數字超過 3 位數字以上時,每隔 3 位會多增加一個因為的逗號。所以根據上面的程式碼邏輯得到的就是 show index 1,035
了,結果多了個英文的逗號,而將這個拼接出來的指令手動執行是查不出來資料的。終於破案了,撒花,撒花,撒花! ! !
第一種方法是將數字轉為字串,然後再進行格式化,將上面的程式碼修改為如下:
public String queyBySsh() { // 这里拼接的时候先调用一下 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需注意哪些問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!