Java占位符
一、背景
在使用java开发的过程中,经常需要使用将字符串拼接到一起(比如,用于日志输出),常用方法如下:
- 使用+将不同字符串进行拼接
- 使用StringBuilder
- 使用String.format
- 使用MessageFormat.format
二、4种方式性能对比
上面4中方式,性能方面孰优孰劣,可以做如下验证:
public static void main(String[] args) throws Exception {
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 = 141 millisecond
Format = 1880 millisecond
MessageFormat = 383 millisecond
StringBuilder = 142 millisecond
将count的值增加10倍,到10000000,得到结果如下:
Concatenation = 1379 millisecond
Format = 18944 millisecond
MessageFormat = 3690 millisecond
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}
参考:
MessageFormat vs String plus性能对比
Java占位符的更多相关文章
- Java 占位符使用 和 修饰符
Java中占位符的使用 String类的format()方法 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法, ...
- Android之使用JAVA占位符格式数据(很实用)
小编虽然是学java出生,但工作之后就一直从事android开发,很多java基础都忘记完了,最近一年从ES换到了AS,原来的很多习惯都收到了挑战,比如我喜欢ES写方法的时候先在JAVA projec ...
- Java 占位符
Java的占位符有两种:% 和 {} String 类对象 只能使用 % 有效. MessageFormat 类对象 只能使用 {} 有效. package demo; import java.tex ...
- Java占位符替换工具类
import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFact ...
- java占位符应用
(转载自:http://www.cnblogs.com/happyday56/p/3996498.html) String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语 ...
- java的占位符
java占位符的类型: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.fo ...
- Java_占位符使用
public class t7 { public static void main(String[] args) { // TODO Auto-generated method stub //Java ...
- Java C# C语言中的占位符
一般拼接一段字符串在编程中是很常见的事,下面简单做个总结: 什么是占位符?占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 1.Java中处理方法: package com.amos; ...
- Java使用占位符拼接字符串
大家知道,在C#编程中,可以用占位符来拼接字符串,用起来非常的方便. 特别是需要进行大量的参数拼接的时候,比如: Console.WriteLine(String.Format("该域名{0 ...
随机推荐
- mybatis基础系列(一)——mybatis入门
好久不发博客了,写博文的一个好处是能让心静下来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射. ...
- spring MVC 使用 hibernate validator验证框架,国际化配置
spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...
- kubespray -- k8s集群dashboard 访问方式
1.参考这篇文章: https://github.com/kubernetes/dashboard/wiki/Creating-sample-user 创建用户 2.获取token 3.kubectl ...
- linux内存管理源码分析 - 页框分配器
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 最近在学习内核模块的框架,这里做个总结,知识太多了. 分段和分页 先看一幅图 也就是我们实际中编码时遇到的内存地 ...
- FileShare枚举的使用(文件读写锁) - (转载)
开发过程中,我们往往需要大量与文件交互,但往往会出现很多令人措手不及的意外,所以对普通的C#文件操作做了一次总结,问题大部分如下: 写入一些内容到某个文件中,在另一个进程/线程/后续操作中要读取文件内 ...
- C# 套接字编程:Scoket,我用Scoket做的C# Windows应用程序如下:
首先请允许我做一个截图: 以上,是我服务端设计 我们知道:服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,由此可以看出未定义的端口相当多.因此,我们可以通过程序随机获取一个当前可用的 ...
- 一致性哈希(hash)算法
一.算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正 ...
- 大数据处理过程核心技术ETL详细介绍
架构挑战 1.对现有数据库管理技术的挑战. 2.经典数据库技术并没有考虑数据的多类别(variety).SQL(结构化数据查询语言),在设计的一开始是没有考虑到非结构化数据的存储问题. 3.实时性技术 ...
- Flask_admin 笔记六 modelView的内置方法
增加model后端Flask-Admin对与之配合的数据库模型做了一些假设. 如果要实现自己的数据库后端,并且Flask-Admin的模型视图仍可按预期工作,则应注意以下事项:1) 每一个model必 ...
- 插件GsonFormat快速生成JSon实体类
IntelliJ IDEA 个人觉得是目前最好最强最智能的Java IDE,默认已经集成了几乎所有主流的开发工具和框架. 1.常用工具支持Java日常开发需要接触到很多常用的工具,为了便于使用,很多工 ...