前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java避坑指南: java.text.MessageFormat 对较大整数类型的格式化问题

Java避坑指南: java.text.MessageFormat 对较大整数类型的格式化问题

作者头像
崔认知
发布2023-06-19 16:52:02
发布2023-06-19 16:52:02
46400
代码可运行
举报
文章被收录于专栏:nobodynobody
运行总次数:0
代码可运行

现象:对整数格式化会出现“,"符号


使用org.apache.ibatis.jdbc.SQL动态生成sql时候,为了灵活设置参数,使用了MessageFormat来格式化:

代码语言:javascript
代码运行次数:0
运行
复制

import org.apache.ibatis.jdbc.SQL;

import java.text.MessageFormat;

/**
 * @author 认知科技技术团队
 * 微信公众号:认知科技技术团队
 */

public class DemoConfig {
    public static void main(String[] args) {
        SQL sql = new SQL();
        sql.SELECT("a,b,c");
        sql.FROM("test_table");
        sql.WHERE("a > {0} ");

        String sqlStr = MessageFormat.format(sql.toString(), 100);
        System.out.println(sqlStr);
    }
}

1、当参数整数比较小时,测试数据为100,输出:

格式化后的整数100,为100。

2、当参数整数比较大是,测试数据为10000,输出:

此时10000,被格式化为10,000,显然不是我们预期的结果

MessageFormat如何格式化整数


代码语言:javascript
代码运行次数:0
运行
复制
java.text.MessageFormat#format(java.lang.String, java.lang.Object...)

其实现,是根据参数类型转而用NumberFormat的实例DecimalFormat去格式化整数。

如何避免被DecimalFormat格式化,防止产生本博文不正确的sql参数


MessageFormat.format的所有参数转换为字符串类型,即显示格式化参数

如:

代码语言:javascript
代码运行次数:0
运行
复制
MessageFormat.format(sql.toString(), ""+ 10000);
代码语言:javascript
代码运行次数:0
运行
复制
MessageFormat.format(sql.toString(), String.valueOf(10000));
代码语言:javascript
代码运行次数:0
运行
复制
MessageFormat.format(sql.toString(),  Long.toString(10000));

等等;

小结


java.text.MessageFormat 对较大整数类型的格式化,会出现我们意想不到的格式问题,为了避免这种情况的出现,我们可以把参数都显示格式化为字符。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档