Java中MessageFormat的坑
文章目录
- 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()));
}
第二种方法是增加 MessageFormat
的 FormatStyle
,将上面的代码修改为如下:
public String queyBySsh() {// 这里的 # 就是定义的 FamatStyleString command = MessageFormat("show index {0, number, #}", getMaxIndex());
}
Java中MessageFormat的坑相关推荐
- Java中MessageFormat的使用
用于字符串替换,你还在用以下的这种方法吗? String.format(String format, Object... args) 这是String类型的静态方法,但是除此之外,JDK提供了更好用的 ...
- 常见的内存错误java_Java虚拟机常见内存溢出错误汇总,Java中常见的坑看了可以少走点弯路...
那篇沃那粕矩要汇总了Java实拟机常睹挡刳存溢得降足误,警示哪当ツ倒家,躲免得降足,感爱好的朋友可能懂里下 1.劳行 哪当ツ倒事java斥地的小伙伴正在平常平但凡的斥地任胃┬,该当会肥睹各类百般的同扯 ...
- Java中的一些坑,汇总篇(2万字)
Photo @ Drew Farwell 文 | 常意 1.前言 查看全文 http://www.taodudu.cc/news/show-1122809.html 相关文章: 高并发系统 3 大 ...
- java中常用的坑_Java技术开发中的坑
1.(2014/05/28)struts2中使用eclipse自动获取getter和setter方法的坑 今天着实被eclipse坑了一把,平时遇到get和set方法时,我都是通过eclipse自动生 ...
- 在Java中==的一个坑
观察下面代码,输出结果是什么? public static void main(String[] args) {Integer p = 10000;Integer q = 10000;System.o ...
- Java中利用MessageFormat对象实现类似C# string.Format方法格式化
我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使 ...
- Java 中 10 大坑爹功能!
今天我们就来聊一下 Java 中的 10 大坑爹功能,它们分别是: 1.switch必须加上break才结束 2.逻辑运算符的"短路"现象 3.数组下标从零开始 4.ArrayLi ...
- java正则校验的坑正则校验公式正确性
1,首先讲一下java中正则表达式的坑 举例: 欲校验公式(+x+1)合法性,正则表达式\([+\-*/]+,使用菜鸟在线正则校验就可以匹配,而使用java的String.matches方式竟然匹配不 ...
- Java中的增强for循环的实现原理与坑
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在JAVA中,遍历集合和数组一般有以下三种形式: for (int i = 0; i < ...
最新文章
- gns3 查看网关_gns3常用命令
- [导入]深入了解OpenOffice.org(二){作者:路广}
- 116-数学运算符更多的使用
- vnc安装mysql_centos 6.7安装与配置vncserver
- react 富文本编辑器 react-draft-wysiwyg 的使用总结
- 微信群怎么添加二狗机器人?
- PHP代码审计11—逻辑漏洞
- 用MySQl创建供应商标s_建立一个供应商、零件数据库。其中供应商表S(Sno - 问答库...
- 顶级域名 一级域名 二级域名 三级域名划分
- 英语不好学计算机特长,指导:英语学不好,是因为你没养成这些好习惯
- 记2015年的腾讯校招经历——状态篇
- c语言程序0到1000的素数,C语言实现之100-1000以内素数的等差数列
- 多智能体强化学习-G2ANet
- 独立看门狗和窗口看门狗的区别
- 时间字符串转中国标准时间转时间戳转年月日格式
- 学画画,这些美术集标记好的学习重点拿去用
- MariaDB Galera Cluster 集群部署
- maven shade 插件的小插曲
- 谷歌人工智能责任:技术、人工智能、社会和文化 | Responsible AI at Google Research: Technology, AI, Society and Culture
- cakephp部署及实例操作
热门文章
- 如何用c语言让电脑发声,用C语言发声
- iOS小知识:开发者后台添加新的UDID之后,如何更新自动管理签名证书的设备描述文件(Provisioning Profiles)?
- 超声波模块STM32F1X开发
- 从100PV到1亿级PV网站架构演变(转)
- vb.net 获取系统图标_【系统更新V4】优麒麟 20.04 LTS持续完善!优化高清屏支持,上架6款新应用!...
- 罗尔定理_高数_1元微积分
- 传奇私服架设(温故2002,自己制作传奇私服服务器)
- 详解 图像旋转变换 原理
- 5G时代系列谈:(五)未来之势
- WRF后处理:降雨量的说明以及降雨的绘制