java替换字符串模板渲染

java替换字符串模板渲染

使用内置String.format

String message = String.format("您好%s,晚上好!您目前余额:%.2f元,积分:%d","张三", 10.155, 10);
System.out.println(message);
//您好张三,晚上好!您目前余额:10.16元,积分:10

使用内置的MessageFormat

String message1 = MessageFormat.format("您好{0},晚上好!您目前余额:{1,number,#.##}元,积分:{2}", "张三", 10.155, 10);
System.out.println(message);
//您好张三,晚上好!您目前余额:10.16元,积分:10

``注意:1.如果最后结果想加上一个单引号,就需要在相应占位符上加上两个单引号,才能准确转换。`

2.如果传入的参数为null,会自动替换为null。如果想替换为空白或者其他的字符,可以使用StringUtils.defaultIfBlank(d,"结果") 替换

3.少用StringBuilder的toString 每次调用toString方法,会重新new一个String出来。
在java.lang.String的代码中,value并不是直接指向的,而是通过系统拷贝函数进行的内存操作, **``如果toString太多的话,CPU会一直忙于进行内存的分配工作,会导致机器的load过高。```

案例

/**
     * java替换字符串测试
     */
    @Test
    public void replaceCharTest() {
//        方式一:使用内置String.format()
        String message = String.format("您好%s,晚上好!您目前余额:%.2f元,积分:%d","张三", 10.155, 10);
//        输出:您好张三,晚上好!您目前余额:10.16元,积分:10
        System.out.println(message);
//        方式二:使用内置的MessageFormat
        String message1 = MessageFormat.format("您好{0},晚上好!您目前余额:{1,number,#.##}元,积分:{2}", "张三", 10.155, 10);
//        输出:您好张三,晚上好!您目前余额:10.15元,积分:10
        System.out.println(message1);
        String a= "aaa";
        String b= "bb";
        String c= "c";
        StringBuilder sb = new StringBuilder();
        sb.append(a).append(b).append(c);
        System.out.println(MessageFormat.format(" {0} {1} {2} {3}", a, b,"",sb));
//      输出:  aaa bb  aaabbc

        System.out.println(MessageFormat.format(" ''{0}'' '{1}' {2} {3}", a, b,"",sb.toString()));
//      输出 'aaa' {1}  aaabbc
        String d = null;
        System.out.println(MessageFormat.format(" {0}", d));
//        输出:null
        System.out.println(MessageFormat.format(" {0}", StringUtils.defaultIfBlank(d,"结果")));
//        输出:结果



    }

MessageFormat使用规则

FormatElement:
         { ArgumentIndex }:是从0开始的入参位置索引。
         { ArgumentIndex , FormatType }
         { ArgumentIndex , FormatType , FormatStyle }

 FormatType: :指定使用不同的Format子类对入参进行格式化处理。值范围如下:
         number:调用NumberFormat进行格式化
         date:调用DateFormat进行格式化
         time:调用DateFormat进行格式化
         choice:调用ChoiceFormat进行格式化

 FormatStyle::设置FormatType中使用的格式化样式。值范围如下:
         short
         medium
         long
         full
         integer
         currency
         percent
         SubformatPattern (子格式模式,形如#.##)

以str为例,在这个字符串中:

1. {0}{1,number,short}{2,number,#.#}; 都属于FormatElement,0,1,2是ArgumentIndex。
2. {1,number,short} 里面的number属于FormatType,short则属于FormatStyle。
3. {1,number,#.#} 里面的#.#就属于子格式模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌兮~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值