文章目录

  • Java中MessageFormat的坑
    • 问题现象
    • 问题排查
    • 如何解决

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() {// 这里的 # 就是定义的 FamatStyleString command = MessageFormat("show index {0, number, #}", getMaxIndex());
}

Java中MessageFormat的坑相关推荐

  1. Java中MessageFormat的使用

    用于字符串替换,你还在用以下的这种方法吗? String.format(String format, Object... args) 这是String类型的静态方法,但是除此之外,JDK提供了更好用的 ...

  2. 常见的内存错误java_Java虚拟机常见内存溢出错误汇总,Java中常见的坑看了可以少走点弯路...

    那篇沃那粕矩要汇总了Java实拟机常睹挡刳存溢得降足误,警示哪当ツ倒家,躲免得降足,感爱好的朋友可能懂里下 1.劳行 哪当ツ倒事java斥地的小伙伴正在平常平但凡的斥地任胃┬,该当会肥睹各类百般的同扯 ...

  3. Java中的一些坑,汇总篇(2万字)

    Photo @ Drew Farwell 文  |  常意 1.前言 查看全文 http://www.taodudu.cc/news/show-1122809.html 相关文章: 高并发系统 3 大 ...

  4. java中常用的坑_Java技术开发中的坑

    1.(2014/05/28)struts2中使用eclipse自动获取getter和setter方法的坑 今天着实被eclipse坑了一把,平时遇到get和set方法时,我都是通过eclipse自动生 ...

  5. 在Java中==的一个坑

    观察下面代码,输出结果是什么? public static void main(String[] args) {Integer p = 10000;Integer q = 10000;System.o ...

  6. Java中利用MessageFormat对象实现类似C# string.Format方法格式化

    我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...

  7. Java 中 10 大坑爹功能!

    今天我们就来聊一下 Java 中的 10 大坑爹功能,它们分别是: 1.switch必须加上break才结束 2.逻辑运算符的"短路"现象 3.数组下标从零开始 4.ArrayLi ...

  8. java正则校验的坑正则校验公式正确性

    1,首先讲一下java中正则表达式的坑 举例: 欲校验公式(+x+1)合法性,正则表达式\([+\-*/]+,使用菜鸟在线正则校验就可以匹配,而使用java的String.matches方式竟然匹配不 ...

  9. Java中的增强for循环的实现原理与坑

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在JAVA中,遍历集合和数组一般有以下三种形式: for (int i = 0; i < ...

最新文章

  1. gns3 查看网关_gns3常用命令
  2. [导入]深入了解OpenOffice.org(二){作者:路广}
  3. 116-数学运算符更多的使用
  4. vnc安装mysql_centos 6.7安装与配置vncserver
  5. react 富文本编辑器 react-draft-wysiwyg 的使用总结
  6. 微信群怎么添加二狗机器人?
  7. PHP代码审计11—逻辑漏洞
  8. 用MySQl创建供应商标s_建立一个供应商、零件数据库。其中供应商表S(Sno - 问答库...
  9. 顶级域名 一级域名 二级域名 三级域名划分
  10. 英语不好学计算机特长,指导:英语学不好,是因为你没养成这些好习惯
  11. 记2015年的腾讯校招经历——状态篇
  12. c语言程序0到1000的素数,C语言实现之100-1000以内素数的等差数列
  13. 多智能体强化学习-G2ANet
  14. 独立看门狗和窗口看门狗的区别
  15. 时间字符串转中国标准时间转时间戳转年月日格式
  16. 学画画,这些美术集标记好的学习重点拿去用
  17. MariaDB Galera Cluster 集群部署
  18. maven shade 插件的小插曲
  19. 谷歌人工智能责任:技术、人工智能、社会和文化 | Responsible AI at Google Research: Technology, AI, Society and Culture
  20. cakephp部署及实例操作

热门文章

  1. 如何用c语言让电脑发声,用C语言发声
  2. iOS小知识:开发者后台添加新的UDID之后,如何更新自动管理签名证书的设备描述文件(Provisioning Profiles)?
  3. 超声波模块STM32F1X开发
  4. 从100PV到1亿级PV网站架构演变(转)
  5. vb.net 获取系统图标_【系统更新V4】优麒麟 20.04 LTS持续完善!优化高清屏支持,上架6款新应用!...
  6. 罗尔定理_高数_1元微积分
  7. 传奇私服架设(温故2002,自己制作传奇私服服务器)
  8. 详解 图像旋转变换 原理
  9. 5G时代系列谈:(五)未来之势
  10. WRF后处理:降雨量的说明以及降雨的绘制