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

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

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

1. %d1$%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` 格式化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android自定义View 实现闹钟唤起播放闹钟铃声功能

    Android自定义View 实现闹钟唤起播放闹钟铃声功能

    这篇文章主要介绍了Android自定义View 实现闹钟唤起播放闹钟铃声的效果,本文通过实例代码给大家详解,需要的朋友可以参考下
    2016-12-12
  • Android编程实现AIDL(跨进程通信)的方法详解

    Android编程实现AIDL(跨进程通信)的方法详解

    这篇文章主要介绍了Android编程实现AIDL(跨进程通信)的方法,结合实例形式详细分析了Android实现AIDL(跨进程通信)的原理、具体流程与相关实现技巧,需要的朋友可以参考下
    2016-06-06
  • 规避Android开发中内存泄漏陷阱的解决方案

    规避Android开发中内存泄漏陷阱的解决方案

    在Android开发中,内存泄漏是一个常见但容易被忽视的问题,它会导致应用程序占用过多的内存资源,最终影响应用的性能和用户体验,本文将深入探讨Android常见的内存泄漏问题,并提供优化指南,需要的朋友可以参考下
    2024-05-05
  • Android初学者必须知道的10个技术

    Android初学者必须知道的10个技术

    本篇内容给大家整理10个作为Android初学者必须要了解和会用的技术以及详细代码分析,需要的朋友收藏下慢慢学习吧。
    2017-12-12
  • Android Parcelable接口使用方法详解

    Android Parcelable接口使用方法详解

    这篇文章主要介绍了 Android Parcelable接口使用方法详解的相关资料,实现Parcelable就是为了进行序列化,需要的朋友可以参考下
    2017-08-08
  • 一文彻底搞懂Kotlin中的协程

    一文彻底搞懂Kotlin中的协程

    这篇文章主要给大家介绍了Kotlin中协程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Android利用ShaderMask实现花里胡哨的文字特效

    Android利用ShaderMask实现花里胡哨的文字特效

    我们的 App 大部分时候的文字都是一种颜色,实际上,文字的颜色也可以多姿多彩。我们今天就来介绍一个能够轻松实现文字渐变色的组件 —— ShaderMask,感兴趣的可以了解一下
    2022-12-12
  • Android布局之RelativeLayout相对布局

    Android布局之RelativeLayout相对布局

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列,下面通过本文给大家介绍Android布局之RelativeLayout相对布局,涉及到android relativelayout相对布局相关知识,对android relativelayout相对布局相关知识,感兴趣的朋友一起学习吧
    2015-12-12
  • Android整理好的图片压缩工具类

    Android整理好的图片压缩工具类

    今天小编就为大家分享一篇关于Android整理好的图片压缩工具类,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • android studio的Handler简单实例代码

    android studio的Handler简单实例代码

    今天通过实例代码给大家介绍android studio的Handler简单用法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10

最新评论