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 ...
随机推荐
- druid和druid-spring-boot-starter区别,以及springboot项目中提示报错Cannot resolve configuration property 'spring.datasource.xxxx' 和hikari配置属性
一.druid和druid-spring-boot-starter区别分析 作用是一样的,都是连接池提供连接,里边的配置参数都是一样的: druid-spring-boot-starter只是在dru ...
- HarmonyOS实战[三]—可编辑的卡片交互
相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化服务体验[可编辑的卡片交互]快来尝试吧 [本文正在参与"有奖征文|Harm ...
- 20.6 OpenSSL 套接字分发RSA公钥
通过上一节的学习读者应该能够更好的理解RSA加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公 ...
- centos7.9离线升级openssl和openssh9.2
前言 最近有几台服务器漏扫出了关于openssh的漏洞,升级完后顺便记录一下. 环境 CentOS Linux release 7.9.2009 (Core) 开始升级 准备工作 下载安装包: zli ...
- 案例:OGG目标端进程ABENDED处理
源端环境:RHEL 6.5 + Oracle 11.2.0.4 RAC + OGG 19.1.0.0.4 目标端环境:RHEL 7.6 + Oracle 19.3 + OGG 19.1.0.0.4 故 ...
- Java连接MySQL8.0样例代码
代码功能: 针对MySQL8.0,可以动态传入数据库连接信息(IP.端口.数据库.用户.密码).以及需要执行查询SQL. 注意:由于代码中打印表中的数据,所以最后在Main方法传入的参数是需要是查询的 ...
- C++ 单例模式以及内存管理
引用: https://zhuanlan.zhihu.com/p/37469260 https://www.cnblogs.com/xiaolincoding/p/11437231.html http ...
- CF1913
C 先用桶记录各个位数量. 对于每次询问,从低位到高位扫,先用掉一个当前位的,然后把当前位的全部转化成 \(cnt/2\) 个更高位的. D 有一个思路:其实删区间可以视作删相邻两个数.(然鹅这题不是 ...
- JS leetcode 两个数组的交集I II 合集题解分析
壹 ❀ 引 前些日子,在与博客园用户MrSmileZhu闲聊中,我问到了他先前在字节跳动面试中遇到了哪些算法题(又戳到了他的伤心处),因为当时面试的高度紧张,原题描述已经无法重现了,但大概与数组合并. ...
- NC20240 [SCOI2005]互不侵犯KING
题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案. 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子. 输入描述 只有一行 ...