Java开发中String.format的妙用
format方法是String类中的一个方法,主要作用是用来格式化字符串。当前做
的一个功能当中,刚好用到了这个方法,代码处理起来非常简便。因此就写篇博客
记录下来。
分析使用场景:前端App需要根据不同的数据类型展示不同的文案信息,总共
分为六七种数据类型,而且每一种文案展示信息都需要动态组装时间和名称信息。比如
xxxx时间做了xxxx名称的事情。有两个地方需要进行信息的动态填充,其他固定的
文案信息也不相同,这个需求该怎么做的?
确定解决方案:自己首先能够想到的就是使用StringBuilder进行拼接,因为使用
这个类不会创建过多的对象,效率也比较高。使用StringBuilder的缺点就是可能会有
很多的if/else,即使是使用switch语句,分支也会比较多。自己在想有没有什么更
简便的方法。无意中和同事聊天的时候,他提供一种方案,可以考虑使用String.format()
方法试试。
开始开发:确定方案之后,自己首先使用if/else if/else的方式把代码写出来,不是太友好
看上去不雅观,不过先保证能使用。之后开始尝试使用同事推荐的新方法,写好之后发现代码
非常地简洁。最后还是打算采用新方案,使用String.format()的方式来做,然后在搭配一个枚举类,
在枚举类中可以定义多个值,第一个值可以定义未数据类型,第二个值可以定义为需要转换的字符串。
处理数据时,可以通过数据类型获取对应的枚举,然后获取到需要处理的字符串,最后通过
String.format()传入需要处理的字符串和处理的数据,这样简化下来之后,只剩下几行代码,并且
字符串是提前定义好的,效率也不会太差。示例如下,
public enum DataTypeEnum {
DATA_TYPE_ONE("ONE", "%s的性别是%s, 籍贯为%s"),
DATA_TYPE_TWO("TWO", "%s的性别是%s, 籍贯为%s"),
DATA_TYPE_THREE("THREE", "%s的性别是%s, 籍贯为%s")
;
/*
* 替换内容
*/
private String content;
/*
* 代码
*/
private String code;
public String code() {
return this.code;
};
public String content() {
return this.content;
};
/*
* 枚举类的定义方式
*/
DataTypeEnum(String code, String content){
this.code = code;
this.content = content;
}
public static DataTypeEnum fromValue(String value) {
return MAPS.get(value);
}
private static final Map<String, DataTypeEnum> MAPS =
Maps.uniqueIndex(Arrays.asList(DataTypeEnum.values()), DataTypeEnum::code);
}
测试代码如下:
public class StringTest {
public static void main(String[] args) {
String result = String.format("%s的性别是%s, 籍贯为%s", "小明", "男", "广东深圳");
System.out.println("result--->" + result);
}
}
说明:测试代码中文案是一样的,真实项目中有多种不同类型的文案信息。可以根据实际需要来确定文案。
测试结果为

如果有更好建议的小伙伴,欢迎留言讨论。
Java开发中String.format的妙用的更多相关文章
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- Java开发中使用sort排序
Java开发中使用sort排序 BaiduSpring https://baijiahao.baidu.com/s?id=1625440912158830354&wfr=spider& ...
- JAVA字符串格式化String.format()的使用
JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径. 路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:\abc\1.txt. 什么是相对路径呢?相对路 ...
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- Java开发中常见的危险信号(上)
本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...
- JAVA字符串格式化-String.format()的使用 【生成随机数补0操作】
转: JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的s ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- Java开发中代码规范有哪些?
Java开发中所要遵守的编码规范大体上有如下7点.命名规范.注释规范.缩进排版规范.文件名规范.声明规范.语句规范以及编程规范. 1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z) ...
- Java开发中常用jar包整理及使用
本文整理了我自己在Java开发中常用的jar包以及常用的API记录. <!-- https://mvnrepository.com/artifact/org.apache.commons/com ...
随机推荐
- 【JVM】JDK7后intern方法总结
JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈. 测试代码1如下: @Test public void t ...
- NLP涉及技术原理和应用简单讲解【一】:paddle(梯度裁剪、ONNX协议、动态图转静态图、推理部署)
参考链接: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/advanced/gradient_clip_cn.html 1. ...
- 【深度学习项目二】卷积神经网络LeNet实现minst数字识别
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别 [深度学习项目二]卷积神经网络LeNet实现minst数字识别 [深度学习项目三]ResNet50多分类任务[十二生肖分类] 『深度 ...
- 6.1 C/C++ 封装字符串操作
C/C++语言是一种通用的编程语言,具有高效.灵活和可移植等特点.C语言主要用于系统编程,如操作系统.编译器.数据库等:C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统.图形用户界面 ...
- 驱动开发:运用VAD隐藏R3内存思路
在进程的_EPROCESS中有一个_RTL_AVL_TREE类型的VadRoot成员,它是一个存放进程内存块的二叉树结构,如果我们找到了这个二叉树中我们想要隐藏的内存,直接将这个内存在二叉树中抹去,其 ...
- 用arr.filter数组去重
let res = arr.filter((item,index,arr)=>{ //返回找到的下标,等于 下标 return arr.indexOf(item) === index; }) c ...
- JQ模糊查询插件
//构造函数写法 ;(function($,window,document,undefined){//注意这里的分号必须加 //插件的全部代码 var FazzSearch = function (e ...
- PHP 会话(Session)实现用户登陆功能
PHP 会话(Session)实现用户登陆功能 Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量.UID 存储在 cookie 中,或者通过 U ...
- (C语言)我的第一个项目:命令行窗口下的学生成绩管理系统,及数据生成程序
学生成绩管理系统 页面效果如图: 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- 答疑解惑:解释在Mybatis-Spring下@Mapper与@MapperScan为何不能同时生效以及实现动态条件注册Mapper接口
若项目中使用了@MapperScan注解后,则@Mapper注解不再生效, 原因是:@MapperScan注解 会执行@Import(MapperScannerRegistrar.class),而Ma ...