一、背景

在使用java开发的过程中,经常需要使用将字符串拼接到一起(比如,用于日志输出),常用方法如下:

使用+将不同字符串进行拼接

使用StringBuilder

使用String.format

使用MessageFormat.format

二、4种方式性能对比

上面4中方式,性能方面孰优孰劣,可以做如下验证:

public static void main(String[] args) throwsException {long start =System.currentTimeMillis();int count = 1000000;for (int i = 0; i < count; i++) {

String s= "Hi " + i + "; Hi to you " + i * 2;

}long end =System.currentTimeMillis();

System.out.println("Concatenation = " + ((end - start)) + " millisecond");

start=System.currentTimeMillis();for (int i = 0; i < count; i++) {

String s= String.format("Hi %s; Hi to you %s", i, +i * 2);

}

end=System.currentTimeMillis();

System.out.println("Format = " + ((end - start)) + " millisecond");

start=System.currentTimeMillis();for (int i = 0; i < count; i++) {

String s= MessageFormat.format("Hi %s; Hi to you %s", i, +i * 2);

}

end=System.currentTimeMillis();

System.out.println("MessageFormat = " + ((end - start)) + " millisecond");

start=System.currentTimeMillis();for (int i = 0; i < count; i++) {

StringBuilder bldString= new StringBuilder("Hi ");

bldString.append(i).append("; Hi to you ").append(i * 2).toString();

}

end=System.currentTimeMillis();

System.out.println("StringBuilder = " + ((end - start)) + " millisecond");

}

得到结果如下:

Concatenation = 141millisecond

Format= 1880millisecond

MessageFormat= 383millisecond

StringBuilder= 142 millisecond

将count的值增加10倍,到10000000,得到结果如下:

Concatenation = 1379millisecond

Format= 18944millisecond

MessageFormat= 3690millisecond

StringBuilder= 1487 millisecond

从上面的实验中可以得到如下结论

1、使用+和StringBuilder效率最高;MessageFormat效率次之,大约相当于前面两种方式的3倍左右;String.format效率最差,差出10倍不止。

三、占位符

后两种方式需要使用占位符,而且使用的占位符格式不相同。

1、String.format

解析占位符的方式为正则表达式,使用占位符格式为:%1$s,%2$s。

占位符完整格式为: %[index$][标识]*[最小宽度][.精度]转换符 。

针对不同数据类型的格式化,占位符的格式将有所裁剪。% ,占位符的其实字符,若要在占位符内部使用%,则需要写成 %%。

[index$] ,位置索引从1开始计算,用于指定对索引相应的实参进行格式化并替换掉该占位符。

[标识] ,用于增强格式化能力,可同时使用多个 [标识] ,但某些标识是不能同时使用的。

[最小宽度] ,用于设置格式化后的字符串最小长度,若使用 [最小宽度] 而无设置 [标识] ,那么当字符串长度小于最小宽度时,则以左边补空格的方式凑够最小宽度。

[.精度] ,对于浮点数类型格式化使用,设置保留小数点后多少位。

转换符 ,用于指定格式化的样式,和限制对应入参的数据类型。

2、MessageFormat.format

解析占位符的方式为逐字符扫描,找到大括号做标记,使用占位符格式为:{0},{1}

参考:

java占位符填充_Java占位符相关推荐

  1. java占位符填充_Java使用freemark生成word

    1.制作模板 先用office word做一个模板word文档,${usrName}.${nowDate}占位符 可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式 ...

  2. java修饰符继承_Java修饰符和继承

    您可能感兴趣的话题: Java 核心提示:private 访问局限在同一个类内,并且不可以被继承. java类的成员变量通常有以下几种访问修饰符: public.private.protected或者 ...

  3. java流换行符方法_java换行符的使用方法

    java换行符的使用方法 发布时间:2020-06-22 17:49:56 来源:亿速云 阅读:121 作者:Leah 这篇文章将为大家详细讲解有关java换行符的使用方法,小编觉得挺实用的,因此分享 ...

  4. java 设置组件填充_Java学习笔记(三)Java2D组件

    一  概述 Java2D的一切都基于java.awt包中的Graphics2D类,它是Graphics的子类. 为了绘制图形,需要使用面板作为画布,例如使用JPanel作为画布,面板有一个paintC ...

  5. java word模版填充_Java 数据填充到word模板中

    maven引用 com.deepoove poi-tl 1.6.0-beta1 javax javaee-api 7.0 org.apache.poi poi-ooxml 4.1.2 org.apac ...

  6. java word模版填充_java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  7. java占位符打印_java简单日志打印规范小记

    个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...

  8. Java输出语句以及一些占位符在输出语句中的使用

    Java输出语句以及一些占位符在输出语句中的使用 System.out.print(); Syetem.out.printf(); System.out.println(); print就是一般的标准 ...

  9. java default修饰符_Java修饰符看这一篇就够了

    java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) public:对任何人都是可用的. protect:继承的类 ...

最新文章

  1. 杭电1754--I Hate It(线段树)
  2. 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
  3. python——selenium框架实现无头浏览器访问 + 规避检测配置
  4. 想拿下互联网大厂OFFER,都需要准备什么?
  5. 前端请求接口post_接口自动化测试-WEB资讯专栏-DMOZ中文网站分类目录
  6. bsp模型适用于图计算_【论文解读】目标检测之RFBnet模型
  7. 小程序 微信红包封面后台独立版 带测评积分功能源码
  8. 【BZOJ4108】[Wf2015]Catering 有上下界费用流
  9. httpd-2.2.21 + php-5.3.8 自动安装脚本
  10. 回溯算法——复原IP地址(Leetcode 93)
  11. pytorch nn.MSELoss
  12. redis能模糊删除key吗_redis 模糊匹配和批量删除
  13. docker android模拟器,Docker中的Android模拟器
  14. [蓝桥杯] 青出于蓝胜于蓝
  15. 通过c语言求得一个英文句子中的单词数量
  16. 掌上英雄联盟服务器维护,掌上英雄联盟更改绑定大区的详细方法
  17. BTC的历史背景及历程
  18. 坚持自己的坚持,以不二的姿态坚持到底
  19. 青年是科学的未来:JGG诚聘青年编委
  20. 互联网项目发币一年,“简书们”活得好吗?

热门文章

  1. C51学习笔记 4.定时器
  2. SSM 尚筹网 Vue3 + Vite + Java
  3. ubuntu12.04 GX编译环境搭建
  4. 云原生应用实践与未来趋势
  5. 【正点原子FPGA连载】第三十六章 基于OV5640的PL以太网视频传输实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  6. 人的思想的成长过程是一个潜意识不断成长并替代思维完成细节工作的过程
  7. 常用运行命令win10
  8. Postgresql总结几种HA的部署方式
  9. Unity tolua问题记录
  10. 【期末复习笔记】知识产权法——著作权、专利法、商标权