标签:

一、背景

在使用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}

参考:

标签:

来源: https://www.cnblogs.com/huanyou/p/9652613.html

java placeholder_Java占位符相关推荐

  1. JAVA字符串占位符替换

    JAVA字符串占位符替换 如果有字符串 "我是{0},我来自{1},今年{2}岁. 请问怎样用String的内置方法用替换掉字符串的占位符:比如"我是中国人,我来自北京,今年22岁 ...

  2. java string 占位符_驳《阿里「Java开发手册」中的1个bug》?

    前两天写了一篇关于<阿里Java开发手册中的 1 个bug>的文章,评论区有点炸锅了,基本分为两派,支持老王的和质疑老王的. 首先来说,无论是那一方,我都真诚的感谢你们.特别是「二师兄」, ...

  3. java mysql 占位符_在Java中编写带占位符的SQL语句

    C#中SQL中带占位符的语句 假设有一张学员信息表Student,通过表中的ID来找学员,查询的SQL语句如下 string sql = string.Format("select * fr ...

  4. java jdbc 占位符_java-jdbc

    1.jdbc是什么,它有什么用? java database connection 让java程序员可以直接通过java程序操作数据. jdbc是标准,它是由类与接口组成,对于程序员只需要知道标准(C ...

  5. java word 占位符替换,javaword占位符替换

    一.java中有什么方法可以读取占位符的字符串,并且把占位符替换成参数 可以通过字符串的format方法进行实现. 举例:string domain = "www.ykmaiz.com&qu ...

  6. java double 占位符_Java输出格式化之占位符

    JAVA和C#在占位符方面有些区别,C#提供的占位符是用{num}这种形式,Java需要用%s这种形式,不太习惯,经查发现MessageFormat提供了花括号占位符的功能. [转自]https:// ...

  7. aspose.word 20 java 替换占位符为文字或图片

    以前写过用asposeword 替换文字和图片,但是后来遇到问题,有些word替换替换图片后会导致打开时弹出错误:此文件中检测到错误,单word可以通过进行一下修复来打开文件. 考虑可能是版本有bug ...

  8. java字符串占位符%s

    字符串占位符%s 一.String.format 二.MessageFormat.format 一.String.format 语法 : String.format(String format, Ob ...

  9. java slf4j 占位符_slf4j 占位符

    slf4j format 占位符使用{}. For example, MessageFormatter.format("Hi {}.", "there") 1 ...

最新文章

  1. PyTorch 笔记(09)— Tensor 线性代数计算(torch.trace、torch.diag、torch.mm、torch.dot、torch.inverse逆矩阵、转置)
  2. java的Serialization 机制
  3. 如何评估自己对外界认知是否正确?
  4. android 除了webview 浏览器控件,AgentWeb是基于Android WebView一个功能完善小型浏览器库...
  5. GNN论文笔记: Graph Neural Networks with convolutional ARMA filters
  6. ie浏览器怎样查看html,查看IE浏览器历史记录的方法
  7. 基于vue2.0实现音乐/视频播放进度条组件的思路及具体实现方法+代码解释
  8. apache gobblin mysql_gobblin简单使用
  9. WinCE6 如何去掉控制面板中的应用?
  10. 微信小程序|开发实战篇之十-一些细节处理
  11. web里如何在背景图片上放置div元素_2020年web前端开发经典面试题总结整理(建议收藏)...
  12. QLayout的属性介绍
  13. Mysql中有哪些数据类型(建议收藏)
  14. Vue报错'Do not use built-in or reserved HTML elements as component id:解决方法
  15. js根据本地文件路径上传文件(流上传)
  16. QGIS教程—缓冲区buffer
  17. virtualbox虚拟机迁移
  18. Java实现Redis批量读取List
  19. TypeWriter: Neural Type Prediction with Search-based Validation基于搜索的神经网络预测器
  20. 我用GAN实现了魔法照片!效果太逼真!

热门文章

  1. Linux:修改文件权限命令chmod
  2. 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
  3. WCF 服务中元数据的地址问题
  4. ng执行css3动画
  5. webpack教程——css的加载
  6. 在线报表设计实战系列 – 制作动态列与静态列混排的报表(5)
  7. Android 安全架构及权限控制机制剖析
  8. 【C】sizeof(空结构体/空类)的大小
  9. Spring基础类型注入演示案例
  10. VIM 下工程的管理工具