关于java:Java中MessageFormat的坑

3次阅读

共计 1251 个字符,预计需要花费 4 分钟才能阅读完成。

Java 中 MessageFormat 的坑

问题景象

某个业务性能须要通过 SSH 协定执行命令查问一些数据,而某次查问竟然没有失去任何后果,导致界面没有任何数据,然而手动执行这个命令又是可能查问到数据的。刨了半天日志也的确没有看到日志外面有什么异样的信息,百思不得其解数据到底去哪里了???

问题排查

看了一段时间还是没有什么脉络,这个时候心田开始慌了。

连忙看了一下提交记录,确认了一下代码不是我写的,于是心里稍略微淡定了一点,他人问起也好说不是我写的嘛!

尽管代码不是我写的,然而问题还是要持续看的。毕竟拿了钱,就要干活的嘛。

接下来就只能剖析代码了。首先剖析了一下最有可能出错的中央,就是解析命令查问的响应逻辑。把这个中央的代码和手动执行命令失去的后果放在一起剖析,发现依据这个响应后果是可能失常的失去响应后果的。

看了一会儿也的确没有发现问题,又去看了一下命令拼接的代码,拼接的逻辑就一行,应该是不会出问题的。

没方法了,又去看了看日志,这个时候发现日志外面有打印发送执行的命令。定睛一看,我擦,咋多了个逗号呢?又揉了揉眼镜,确认本人没有看谬误。

这个时候再回去看一下代码,怎么看这个 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()));
}

第二种办法是减少 MessageFormatFormatStyle,将下面的代码批改为如下:

public String queyBySsh() {
    // 这里的 # 就是定义的 FamatStyle
    String command = MessageFormat("show index {0, number, #}", getMaxIndex());
}
正文完
 0