前言
这篇文章已经拖了快一个月。。虽然简单,还是总结一下吧。
最近做项目的时候遇到群发短信消息的需求,然后有个短信模板,大致格式如下 :
{userName} 在 {appName} 中对您发布了新的消息 :{message} 快去查看吧。
也就是在创建短信消息体的时候会有 3 个变量 ,然后你估计会问,这有什么问题? 嗯,确实没啥大问题。
所以我们这里来讨论的,是对于这个消息体字符串的创建我们有哪些方法,而哪个方法又显得比较优雅。
字符串拼接的方法
1、首先最原始、最粗暴的方法,用 ”+“ 号拼接
1 | private String createMessageBody(String userName , String appName,String message ){ |
貌似也没什么不好的地方,但这么多加号拼接在一起,恩, 有种 low low 的感觉
2、StringBuilder 拼接
1 | private String createMessageBody(String userName , String appName,String message ){ |
恩,这种方法貌似看起来也比较臃肿,可读性也不好。只是比第一种效率高,不会产生那么多对象。
3、字符串模板拼接
1 | xml 中 : <string name="message_body">%1$s在%2$s中对您发布了新的消息:%3$s。快去查看吧。</string> |
可以看到这种方法是需要首先在 string 文件夹下定义好完整的文字,然后在代码中通过 getString
方法,传入条件参数。
很显然,这种方法更符合开发规范,因为我们一般是要尽量避免在代码中直接明文写字符串的。
还有,对于支持多语言的应用,前两种方法就更不值得用了。
然后,我们来看一下 android 中 getString(@StringRes int id, Object... formatArgs)
这个方法内部是怎么实现的:
1 | @NonNull |
可以看到,最终调用的是 java 中 String 的 format 方法。
Java String 格式化
这个本来想详细列举一下,但是发现有一篇译文写得很详细,可以作为速查表:
isea533 – Java String 格式化示例
这里简单贴一下文章中常用的格式说明符:
剩余的这里就不再讲解。。。直接结束
总结
恩,这就结束了(😂)
看起来像一篇水文(尴尬)
所以以后遇到需要字符串格式化或者拼接的时候可以优先考虑一下 String.format 方法。来减少直接在代码中输入文字。
PS : 前两天看的 kotlin 的字符串模板挺好用的,但是也相当于是直接硬编码了。