Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android  %d   1$%d格式化

Android `%d` 与 `1$%d` 格式化的区别解析

作者:jiet_h

本文详细解析了Android开发中`%d`和`1$%d`格式化占位符的区别,并通过Kotlin代码示例帮助理解,`%d`按顺序填充参数,而`1$%d`按指定索引填充参数,后者在多语言场景下更灵活,感兴趣的朋友一起看看吧

在 Android 开发中,我们经常需要对字符串进行格式化处理,比如动态填充数字、日期、字符等。
其中,%d1$%d 都是格式化占位符,但它们在使用上有一些不同。
本文将详细解析这两者的区别,并结合 Kotlin 代码示例帮助你理解。

1. %d1$%d 的基本概念

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 的工作原理

4. 为什么需要 1$%d

在多语言(Localization)场景下,不同语言的语序可能不同,比如:

如果我们只用 %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 日

这样在适配不同语言时,只需要修改 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` 格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

阅读全文