Android -- String 格式化使用示例

前言

这篇文章已经拖了快一个月。。虽然简单,还是总结一下吧。

最近做项目的时候遇到群发短信消息的需求,然后有个短信模板,大致格式如下 :

{userName} 在 {appName} 中对您发布了新的消息 :{message} 快去查看吧。

也就是在创建短信消息体的时候会有 3 个变量 ,然后你估计会问,这有什么问题? 嗯,确实没啥大问题。
所以我们这里来讨论的,是对于这个消息体字符串的创建我们有哪些方法,而哪个方法又显得比较优雅。

字符串拼接的方法

1、首先最原始、最粗暴的方法,用 ”+“ 号拼接

private  String  createMessageBody(String userName , String appName,String message  ){ 
        String messageBody = userName + "在" + appName + "中对您发布了新的消息 :" + message + " 快去查看吧。";
         return  messageBody;
    }

貌似也没什么不好的地方,但这么多加号拼接在一起,恩, 有种 low low 的感觉

2、StringBuilder 拼接

  private  String  createMessageBody(String userName , String appName,String message  ){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(userName)
                .append("在")
                .append(appName)
                .append("中对您发布了新的消息 :")
                .append(message)
                .append("快去查看吧 。");
        return  stringBuilder.toString();
    }

恩,这种方法貌似看起来也比较臃肿,可读性也不好。只是比第一种效率高,不会产生那么多对象。

3、字符串模板拼接

xml 中 :  <string name="message_body">%1$s在%2$s中对您发布了新的消息:%3$s。快去查看吧。</string>

private  String  createMessageBody(String userName , String appName,String message  ){
       String messageBody = getResources().getString(R.string.message_body,userName,appName,message);
       return messageBody;
    }

可以看到这种方法是需要首先在 string 文件夹下定义好完整的文字,然后在代码中通过 getString 方法,传入条件参数。
很显然,这种方法更符合开发规范,因为我们一般是要尽量避免在代码中直接明文写字符串的。

还有,对于支持多语言的应用,前两种方法就更不值得用了。

然后,我们来看一下 android 中 getString(@StringRes int id, Object... formatArgs) 这个方法内部是怎么实现的:

    @NonNull
    public String getString(@StringRes int id, Object... formatArgs) throws NotFoundException {
        final String raw = getString(id);
        return String.format(mResourcesImpl.getConfiguration().getLocales().get(0), raw,
                formatArgs);
    }

可以看到,最终调用的是 java 中 String 的 format 方法。

Java String 格式化

这个本来想详细列举一下,但是发现有一篇译文写得很详细,可以作为速查表:
isea533 – Java String 格式化示例

这里简单贴一下文章中常用的格式说明符:
在这里插入图片描述
剩余的这里就不再讲解。。。直接结束

总结

恩,这就结束了(?)

看起来像一篇水文(尴尬)

所以以后遇到需要字符串格式化或者拼接的时候可以优先考虑一下 String.format 方法。来减少直接在代码中输入文字。

PS : 前两天看的 kotlin 的字符串模板挺好用的,但是也相当于是直接硬编码了。

参考文章

isea533 – Java String 格式化示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值