android 动态引用含占位符的字符串时,出现红波浪线如何解决

现象:

在开发时,想动态引用含占位符的字符串,发现有红色波浪线警告,项目可以正常运行,既然是警告,肯定就是我们代码有问题。

将鼠标放上去提示警告:
Format string 'xxx' is not a valid format string so it should not be passed to String.format
大意是字符串“xxx”不是有效的格式字符串,不能使用format转型。

系统给出的建议是添加如下代码,及忽略对应的警告:

@SuppressLint("StringFormatMatches")
@SuppressLint("StringFormatInvalid")

既然是警告,肯定是我们哪里写的不规范或者代码是失效的。

解决方案:

仔细检查string中的书写是否准确,多语言是否所有语言都写了占位符。
经过排查发现,原来是多语言使用字符串占位符时,其中一个语言没有使用占位符,于是studio提出了警告,给对应语言添加占位符后,红色波浪线的警告消失了。

占位符

我们常用的占位符有:%s、%d、%1$ s、%2$ d(中间没空格,不显示$ ,所以加了空格)
%1$ s表示把第一个位置的占位符替换成string类型
%2$ d表示把第二个位置的占位符替换成int类型
%s 表示把此位置的占位符替换成string类型
%d 表示把此位置的占位符替换成int类型

直接看代码实例:

<string name="format_content">%s 来自中国</string>
调用:
getString(R.string.format_content, "zhangsan");
输出:zhangsan 来自中国
       
<string name="format_content_2">%s 是 %s 的 %s ,他们一共 %d 人,他们都是来自 %s </string>
调用:
getString(R.string.format_content_2, "张三", "李四", "好朋友", 3, "上海");
输出:张三 是 李四 的 好朋友 ,他们一共 3 人,他们都是来自 上海      

<string name="format_content_3">%1$s 是 %2$s 的 %3$s ,他们一共 %4$d 人,他们都是来自 %5$s </string>
调用:
getString(R.string.format_content_3, "张三", "李四", "好朋友", 3, "上海");
输出:张三 是 李四 的 好朋友 ,他们一共 3 人,他们都是来自 上海

<string name="format_content_4">%1$s 是 %1$s 的 %1$s ,他们一共 %4$d 人,他们都是来自 %5$s </string>
调用:
getString(R.string.format_content_4, "张三", "李四", "好朋友", 4, "上海");
输出:张三 是 张三 的 张三 ,他们一共 4 人,他们都是来自 上海
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值