/*** 字符串格式化* * @author Mr.wang*/
public class StrFormatter
{public static final String EMPTY_JSON = "{}";public static final char C_BACKSLASH = '\\';public static final char C_DELIM_START = '{';public static final char C_DELIM_END = '}';/*** 格式化字符串<br>* 此方法只是简单将占位符 {} 按照顺序替换为参数<br>* 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>* 例:<br>* 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br>* 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>* 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>* * @param strPattern 字符串模板* @param argArray 参数列表* @return 结果*/public static String format(final String strPattern, final Object... argArray){if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)){return strPattern;}final int strPatternLength = strPattern.length();// 初始化定义好的长度以获得更好的性能StringBuilder sbuf = new StringBuilder(strPatternLength + 50);int handledPosition = 0;int delimIndex;// 占位符所在位置for (int argIndex = 0; argIndex < argArray.length; argIndex++){delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);if (delimIndex == -1){if (handledPosition == 0){return strPattern;}else{ // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果sbuf.append(strPattern, handledPosition, strPatternLength);return sbuf.toString();}}else{if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH){if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH){// 转义符之前还有一个转义符,占位符依旧有效sbuf.append(strPattern, handledPosition, delimIndex - 1);sbuf.append(Convert.utf8Str(argArray[argIndex]));handledPosition = delimIndex + 2;}else{// 占位符被转义argIndex--;sbuf.append(strPattern, handledPosition, delimIndex - 1);sbuf.append(C_DELIM_START);handledPosition = delimIndex + 1;}}else{// 正常占位符sbuf.append(strPattern, handledPosition, delimIndex);sbuf.append(Convert.utf8Str(argArray[argIndex]));handledPosition = delimIndex + 2;}}}// 加入最后一个占位符后所有的字符sbuf.append(strPattern, handledPosition, strPattern.length());return sbuf.toString();}
}

字符串格式化---StrFormatter相关推荐

  1. python 字符串格式化是打印不同类型更简单一些

    Python 支持格式化字符串的输出 与 C 中 sprintf 函数一样的语法 下面写3中不同类型的数据合在一起打印 name = "张三丰" height = 1.88 wei ...

  2. python格式化字符串_Python的3种字符串格式化方法,哪种你最喜欢?

    文末扫二维码领[Python开源项目包] 赠书×大厂笔面试题:秋招一直当炮灰?提升你实力的机会来了! 黄伟呢 | 作者数据分析与统计学之美 | 来源 1 3种字符串格式化工具的简单介绍 python2 ...

  3. python字符串格式化之学习笔记

    在python中格式化输出字符串使用的是%运算符,通用的形式为 •格式标记字符串 % 要输出的值组 其中,左边部分的"格式标记字符串"可以完全和c中的一致.右边的'值组'如果有两个 ...

  4. python字符串的美化_python字符串格式化

    Python的字符串格式化有两种方式:%格式符方式,format方式 %格式符 %[(name)][flags][width].[precision]typecode (name) 可选,用于选择指定 ...

  5. python控制台颜色输出以及字符串格式化输出

    2019独角兽企业重金招聘Python工程师标准>>> 显示颜色格式:\033[显示方式;字体色;背景色m......[\033[0m] ---------------------- ...

  6. JAVA字符串格式化-String.format()的使用

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...

  7. C# 字符串格式化大全

    本文为译文,原文地址http://blog.stevex.net/string-formatting-in-csharp/,转载请注明来自本博客. 关于在.NET中字符串格式化的方法String.Fo ...

  8. python中字符串格式化%与.format

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. Swift 数字字符串格式化

    字符串格式说明符 官网文档:String Format Specifiers 字面值格式化法 如果需要直接显示原样值的时候,只可以方便的在字符串中插入\(变量)显示. 字面值格式: 字符串中包裹着\( ...

最新文章

  1. 计算机网络·“存储-转发”式分组交换网
  2. hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
  3. (二十六)【2021 WWW】Knowledge-Preserving Incremental Social Event Detection via Heterogeneous GNNs
  4. linux vim (your system doesn't appear to have the zip pgm)
  5. python turtle画动物_如何用python画简单的动物
  6. c 给定字符串中查找_【C进阶】练习题(一)
  7. 傅里叶变换的终极解释下
  8. 数组中只出现一次的数字(python解法)
  9. AJAX,PHP,前端简单交互制作输入框效果
  10. 【无标题】win7系统怎么配置adb环境变量
  11. Docker WordPress安装
  12. Dubbo负载均衡策略之最小活跃策略
  13. # 会员注册与登录模块
  14. java的可执行文件_java生成可执行文件的方法总结
  15. [转]PHP大型Web应用入门(一)
  16. 学计算机i5九代,九代i5和九代i7区别
  17. 智能灯泡:可用智能手机控制开关
  18. 《ACT 敏捷教练战术手册》正式发布:ACT 是什么?它和 Scrum 与 Kanban 有什么区别? ...
  19. eclipse 项目报错 但没有提示哪里出错
  20. 暴雪和黑客的战争三:黑客的反击

热门文章

  1. 强化学习(六)---基于无模型强化学习方法
  2. tableau实战系列(三十)- 多细节层次(LOD) 计算产品销售周期延申表达式详解
  3. c语言数字的拆解_C语言解决变态推理题
  4. 怎么改掉科学计数法_马拉松猝死频发为哪般——听听冠军们怎么说
  5. opcclient远程连接opc服务器_软件 | 服务器远程连接软件MobaXterm
  6. Java 授权内幕--转载
  7. JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转
  8. nginx学习笔记(8)虚拟主机名---转载
  9. MacDown的使用规范总结 96 卞泽 2016.04.08 15:05* 字数 1273 阅读 4295评论 10喜欢 34 MacDown是什么? 请点击here MacDown下载地址,请点
  10. 机器学习算法基础——线性回归