java占位符填充_Java占位符
一、背景
在使用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占位符相关推荐
- java占位符填充_Java使用freemark生成word
1.制作模板 先用office word做一个模板word文档,${usrName}.${nowDate}占位符 可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式 ...
- java修饰符继承_Java修饰符和继承
您可能感兴趣的话题: Java 核心提示:private 访问局限在同一个类内,并且不可以被继承. java类的成员变量通常有以下几种访问修饰符: public.private.protected或者 ...
- java流换行符方法_java换行符的使用方法
java换行符的使用方法 发布时间:2020-06-22 17:49:56 来源:亿速云 阅读:121 作者:Leah 这篇文章将为大家详细讲解有关java换行符的使用方法,小编觉得挺实用的,因此分享 ...
- java 设置组件填充_Java学习笔记(三)Java2D组件
一 概述 Java2D的一切都基于java.awt包中的Graphics2D类,它是Graphics的子类. 为了绘制图形,需要使用面板作为画布,例如使用JPanel作为画布,面板有一个paintC ...
- 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 ...
- java word模版填充_java向word模板中填充数据(总结)
使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...
- java占位符打印_java简单日志打印规范小记
个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...
- Java输出语句以及一些占位符在输出语句中的使用
Java输出语句以及一些占位符在输出语句中的使用 System.out.print(); Syetem.out.printf(); System.out.println(); print就是一般的标准 ...
- java default修饰符_Java修饰符看这一篇就够了
java中的修饰符分为类修饰符,字段修饰符,方法修饰符.根据功能的不同,主要分为以下几种: *权限访问修饰符(可以用来修饰类.方法和字段) public:对任何人都是可用的. protect:继承的类 ...
最新文章
- 杭电1754--I Hate It(线段树)
- 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
- python——selenium框架实现无头浏览器访问 + 规避检测配置
- 想拿下互联网大厂OFFER,都需要准备什么?
- 前端请求接口post_接口自动化测试-WEB资讯专栏-DMOZ中文网站分类目录
- bsp模型适用于图计算_【论文解读】目标检测之RFBnet模型
- 小程序 微信红包封面后台独立版 带测评积分功能源码
- 【BZOJ4108】[Wf2015]Catering 有上下界费用流
- httpd-2.2.21 + php-5.3.8 自动安装脚本
- 回溯算法——复原IP地址(Leetcode 93)
- pytorch nn.MSELoss
- redis能模糊删除key吗_redis 模糊匹配和批量删除
- docker android模拟器,Docker中的Android模拟器
- [蓝桥杯] 青出于蓝胜于蓝
- 通过c语言求得一个英文句子中的单词数量
- 掌上英雄联盟服务器维护,掌上英雄联盟更改绑定大区的详细方法
- BTC的历史背景及历程
- 坚持自己的坚持,以不二的姿态坚持到底
- 青年是科学的未来:JGG诚聘青年编委
- 互联网项目发币一年,“简书们”活得好吗?