Android Studio 3.1 Kotlin中检测字符串资源%1$s存在性的问题
解决Android字符串资源中检测
%1$s占位符的问题 嘿,我来帮你搞定这个棘手的问题!你遇到的核心问题其实是字符串获取方式不对或者匹配时的特殊字符处理错误,下面分步骤给你解决方案:
1. 先确保正确获取带占位符的原始字符串
别用getString(R.string.your_res_id)来获取带占位符的字符串——这个方法要求必须传入格式化参数,否则会抛出异常,而且即使强行调用,也拿不到原始的占位符内容。
正确的做法是用getText()方法,它会返回未被格式化的CharSequence,完整保留原始字符串里的占位符:
val rawResourceText = context.resources.getText(R.string.your_resource_id).toString()
2. 正确检测占位符的两种方式
方式一:普通字符串匹配(简单直接)
在Kotlin中,$只有在作为模板变量前缀时才是特殊字符,"%1$s"里的$只是普通字符,所以直接用contains即可:
fun hasExtraPlaceholder(context: Context): Boolean { val rawText = context.resources.getText(R.string.your_resource_id).toString() return rawText.contains("%1$s") }
方式二:正则表达式匹配(更通用,支持多占位符)
如果你的场景需要匹配任意数字的占位符(比如%2$s、%3$s),可以用正则表达式,注意这里要转义$(因为它在正则中表示行尾):
fun hasAnyPlaceholder(context: Context): Boolean { val rawText = context.resources.getText(R.string.your_resource_id).toString() // 正则匹配 %数字$s 格式的占位符 val placeholderPattern = Regex("%\\d+\\$s") return placeholderPattern.containsMatchIn(rawText) }
3. 避坑提醒
- 别用
/转义$!在Java/Kotlin和Android资源文件中,转义特殊字符都是用\,而不是/。 - 如果是在字符串资源文件中要显示
$符号(不是占位符的一部分),才需要写成\$,比如"Price: \$%1$s"表示显示Price: $100这样的内容。
内容的提问来源于stack exchange,提问作者ant2009
相关产品推荐
相关产品推荐

