Android?`%d`?與?`1$%d`?格式化的區(qū)別解析

在 Android 開發(fā)中,我們經(jīng)常需要對(duì)字符串進(jìn)行格式化處理,比如動(dòng)態(tài)填充數(shù)字、日期、字符等。
其中,%d 和 1$%d 都是格式化占位符,但它們?cè)谑褂蒙嫌幸恍┎煌?br />本文將詳細(xì)解析這兩者的區(qū)別,并結(jié)合 Kotlin 代碼示例幫助你理解。
1. %d 和 1$%d 的基本概念
%d:表示整數(shù)占位符,按照傳入?yún)?shù)的順序依次填充。1$%d:表示帶索引的占位符,1$代表第一個(gè)參數(shù),2$代表第二個(gè),以此類推。
2. 代碼示例
我們直接用 Kotlin 代碼來演示兩者的區(qū)別。
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")
}輸出結(jié)果:
使用 %d 格式化: 2025 年 3 月 11 日
使用 1$%d 格式化: 2025 年 3 月 11 日
3. 區(qū)別解析
3.1 %d 的工作原理
- 直接按照傳入的參數(shù)順序進(jìn)行替換。
- 如果參數(shù)順序變了,結(jié)果也會(huì)相應(yīng)改變。
3.2 1$%d 的工作原理
1$明確指定了參數(shù)的位置,即便參數(shù)順序變動(dòng),引用的仍然是指定位置的值。- 適用于多語言(國際化)情況,可以根據(jù)語言調(diào)整順序,而不用改變代碼。
4. 為什么需要 1$%d
在多語言(Localization)場(chǎng)景下,不同語言的語序可能不同,比如:
- 中文:2025 年 3 月 11 日
- 英語:March 11, 2025
如果我們只用 %d,就需要改動(dòng)代碼傳參順序,而 1$%d 允許我們調(diào)整字符串資源中的格式,而無需改變代碼。
5. 在 Android 開發(fā)中的使用
在 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. 總結(jié)
%d適用于簡(jiǎn)單的格式化,不涉及參數(shù)順序調(diào)整。1$%d適用于國際化(i18n)等需要調(diào)整參數(shù)順序的場(chǎng)景。- 在 Android 開發(fā)中,推薦在
strings.xml里使用1$%d,確保不同語言的兼容性。
這樣在適配不同語言時(shí),只需要修改 strings.xml,而不需要調(diào)整代碼的參數(shù)傳遞順序。
android 字符串%s、%1$s、%d、%1$d的使用
%1$s表示替換的為String類型
%1$d表示替換的為int類型
數(shù)字表示替換字符串中要替換的位置,若一個(gè)字符串要替換兩個(gè)int類型,在替換位置分別寫%1$d和%2$d.
%s 、%d為縮寫方式,只替換一個(gè)位置,可以這么寫
替換方式
strings.xml中定義
<string name="remove_family_sure">確定要?jiǎng)h除親友‘%s'嗎?</string>
在類中調(diào)用
String.format(mActivity.getResources().getString(R.string.remove_family_sure),"張三"))
輸出結(jié)果就會(huì)拼接上。
到此這篇關(guān)于Android `%d` 與 `1$%d` 格式化的區(qū)別的文章就介紹到這了,更多相關(guān)Android `%d` `1$%d` 格式化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android利用RecyclerView實(shí)現(xiàn)全選、置頂和拖拽功能示例
列表控件可以說是我們絕大部分App中都會(huì)使用的,為了提升交互樂趣,我們經(jīng)常需要在列表中加入置頂、拖拽等操作,下面這篇文章主要介紹了Android利用RecyclerView如何實(shí)現(xiàn)全選、置頂和拖拽功能的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
Android Handler主線程和一般線程通信的應(yīng)用分析
本篇文章小編為大家介紹,Android Handler主線程和一般線程通信的應(yīng)用分析。需要的朋友參考下2013-04-04
解決Android Studio Gradle Metadata特別慢的問題
這篇文章主要介紹了解決Android Studio Gradle Metadata特別慢的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android基于Xposed修改微信運(yùn)動(dòng)步數(shù)實(shí)例
這篇文章主要介紹了Android基于Xposed修改微信運(yùn)動(dòng)步數(shù)實(shí)例,需要的朋友可以參考下2017-06-06
Android水波紋載入控件CircleWaterWaveView使用詳解
這篇文章主要為大家詳細(xì)介紹了Android水波紋載入控件CircleWaterWaveView使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Android原生側(cè)滑控件DrawerLayout使用方法詳解
這篇文章主要為大家詳細(xì)介紹了Android原生側(cè)滑控件DrawerLayout的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android應(yīng)用中圖片瀏覽時(shí)實(shí)現(xiàn)自動(dòng)切換功能的方法詳解
這篇文章主要介紹了Android應(yīng)用中圖片瀏覽時(shí)實(shí)現(xiàn)自動(dòng)切換功能的方法,文中還講解了一個(gè)觸摸大圖進(jìn)行圖片切換的深入功能,需要的朋友可以參考下2016-04-04

