Android?`%d`?與?`1$%d`?格式化的區(qū)別解析
在 Android 開發(fā)中,我們經(jīng)常需要對字符串進(jìn)行格式化處理,比如動態(tài)填充數(shù)字、日期、字符等。
其中,%d
和 1$%d
都是格式化占位符,但它們在使用上有一些不同。
本文將詳細(xì)解析這兩者的區(qū)別,并結(jié)合 Kotlin 代碼示例幫助你理解。
1. %d
和 1$%d
的基本概念
%d
:表示整數(shù)占位符,按照傳入?yún)?shù)的順序依次填充。1$%d
:表示帶索引的占位符,1$
代表第一個參數(shù),2$
代表第二個,以此類推。
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é)果也會相應(yīng)改變。
3.2 1$%d
的工作原理
1$
明確指定了參數(shù)的位置,即便參數(shù)順序變動,引用的仍然是指定位置的值。- 適用于多語言(國際化)情況,可以根據(jù)語言調(diào)整順序,而不用改變代碼。
4. 為什么需要 1$%d
在多語言(Localization)場景下,不同語言的語序可能不同,比如:
- 中文:2025 年 3 月 11 日
- 英語:March 11, 2025
如果我們只用 %d
,就需要改動代碼傳參順序,而 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
適用于簡單的格式化,不涉及參數(shù)順序調(diào)整。1$%d
適用于國際化(i18n)等需要調(diào)整參數(shù)順序的場景。- 在 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ù)字表示替換字符串中要替換的位置,若一個字符串要替換兩個int類型,在替換位置分別寫%1$d和%2$d.
%s 、%d為縮寫方式,只替換一個位置,可以這么寫
替換方式
strings.xml中定義
<string name="remove_family_sure">確定要刪除親友‘%s'嗎?</string>
在類中調(diào)用
String.format(mActivity.getResources().getString(R.string.remove_family_sure),"張三"))
輸出結(jié)果就會拼接上。
到此這篇關(guān)于Android `%d` 與 `1$%d` 格式化的區(qū)別的文章就介紹到這了,更多相關(guān)Android `%d` `1$%d` 格式化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android自定義View 實(shí)現(xiàn)鬧鐘喚起播放鬧鐘鈴聲功能
這篇文章主要介紹了Android自定義View 實(shí)現(xiàn)鬧鐘喚起播放鬧鐘鈴聲的效果,本文通過實(shí)例代碼給大家詳解,需要的朋友可以參考下2016-12-12Android編程實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的方法詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的原理、具體流程與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06規(guī)避Android開發(fā)中內(nèi)存泄漏陷阱的解決方案
在Android開發(fā)中,內(nèi)存泄漏是一個常見但容易被忽視的問題,它會導(dǎo)致應(yīng)用程序占用過多的內(nèi)存資源,最終影響應(yīng)用的性能和用戶體驗(yàn),本文將深入探討Android常見的內(nèi)存泄漏問題,并提供優(yōu)化指南,需要的朋友可以參考下2024-05-05Android初學(xué)者必須知道的10個技術(shù)
本篇內(nèi)容給大家整理10個作為Android初學(xué)者必須要了解和會用的技術(shù)以及詳細(xì)代碼分析,需要的朋友收藏下慢慢學(xué)習(xí)吧。2017-12-12Android利用ShaderMask實(shí)現(xiàn)花里胡哨的文字特效
我們的?App?大部分時(shí)候的文字都是一種顏色,實(shí)際上,文字的顏色也可以多姿多彩。我們今天就來介紹一個能夠輕松實(shí)現(xiàn)文字漸變色的組件?——?ShaderMask,感興趣的可以了解一下2022-12-12android studio的Handler簡單實(shí)例代碼
今天通過實(shí)例代碼給大家介紹android studio的Handler簡單用法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-10-10