Android `%d` 与 `1$%d` 格式化的区别解析
作者:jiet_h
在 Android 开发中,我们经常需要对字符串进行格式化处理,比如动态填充数字、日期、字符等。
其中,%d
和 1$%d
都是格式化占位符,但它们在使用上有一些不同。
本文将详细解析这两者的区别,并结合 Kotlin 代码示例帮助你理解。
1. %d
和 1$%d
的基本概念
%d
:表示整数占位符,按照传入参数的顺序依次填充。1$%d
:表示带索引的占位符,1$
代表第一个参数,2$
代表第二个,以此类推。
2. 代码示例
我们直接用 Kotlin 代码来演示两者的区别。
fun main() { val format1 = "%d 年 %d 月 %d 日" val format2 = "%1$d 年 %2$d 月 %3$d 日" val year = 2025 val month = 3 val day = 11 val result1 = String.format(format1, year, month, day) val result2 = String.format(format2, year, month, day) println("使用 %d 格式化: $result1") println("使用 1$%d 格式化: $result2") }
输出结果:
使用 %d 格式化: 2025 年 3 月 11 日
使用 1$%d 格式化: 2025 年 3 月 11 日
3. 区别解析
3.1 %d
的工作原理
- 直接按照传入的参数顺序进行替换。
- 如果参数顺序变了,结果也会相应改变。
3.2 1$%d
的工作原理
1$
明确指定了参数的位置,即便参数顺序变动,引用的仍然是指定位置的值。- 适用于多语言(国际化)情况,可以根据语言调整顺序,而不用改变代码。
4. 为什么需要 1$%d
在多语言(Localization)场景下,不同语言的语序可能不同,比如:
- 中文:2025 年 3 月 11 日
- 英语:March 11, 2025
如果我们只用 %d
,就需要改动代码传参顺序,而 1$%d
允许我们调整字符串资源中的格式,而无需改变代码。
5. 在 Android 开发中的使用
在 Android 的 strings.xml
中,我们通常这样定义格式化字符串:
<string name="date_format">%1$d 年 %2$d 月 %3$d 日</string>
然后在代码中使用:
val formattedDate = context.getString(R.string.date_format, 2025, 3, 11) println(formattedDate) // 2025 年 3 月 11 日
- 6. 总结
%d
适用于简单的格式化,不涉及参数顺序调整。1$%d
适用于国际化(i18n)等需要调整参数顺序的场景。- 在 Android 开发中,推荐在
strings.xml
里使用1$%d
,确保不同语言的兼容性。
这样在适配不同语言时,只需要修改 strings.xml
,而不需要调整代码的参数传递顺序。
android 字符串%s、%1$s、%d、%1$d的使用
%1$s表示替换的为String类型
%1$d表示替换的为int类型
数字表示替换字符串中要替换的位置,若一个字符串要替换两个int类型,在替换位置分别写%1$d和%2$d.
%s 、%d为缩写方式,只替换一个位置,可以这么写
替换方式
strings.xml中定义
<string name="remove_family_sure">确定要删除亲友‘%s'吗?</string>
在类中调用
String.format(mActivity.getResources().getString(R.string.remove_family_sure),"张三"))
输出结果就会拼接上。
到此这篇关于Android `%d` 与 `1$%d` 格式化的区别的文章就介绍到这了,更多相关Android `%d` `1$%d` 格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!