You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android的strings.xml字符串数组中使用运行时统一占位符?

直接用实现占位符批量替换的方案

完全可以直接通过字符串数组实现你的需求,无需拆分单个<string>,具体操作如下:

1. 保留strings.xml中的写法

你的原始写法完全可行,直接保留即可:

<string-array name="distance_rating_labels">
    <item>&lt; 5 %s</item>
    <item>&lt; 10 %s</item>
    <item>&lt; 15 %s</item>
</string-array>

其中%s是用于后续替换单位的占位符,XML里的&lt;是小于号的转义字符,最终会正常显示为<。

2. 运行时批量替换占位符

在Android代码中,先获取整个字符串数组,再遍历每个元素用String.format()替换占位符为目标单位(如km或miles):

Kotlin 实现示例:

// 获取原始字符串数组
val originalLabels = resources.getStringArray(R.array.distance_rating_labels)
// 定义要使用的距离单位
val targetUnit = "km" // 可替换为 "miles"
// 批量替换生成带单位的新数组
val formattedLabels = originalLabels.map { String.format(it, targetUnit) }.toTypedArray()

Java 实现示例:

// 获取原始字符串数组
String[] originalLabels = getResources().getStringArray(R.array.distance_rating_labels);
// 定义要使用的距离单位
String targetUnit = "km"; // 可替换为 "miles"
// 批量替换生成带单位的新数组
String[] formattedLabels = new String[originalLabels.length];
for (int i = 0; i < originalLabels.length; i++) {
    formattedLabels[i] = String.format(originalLabels[i], targetUnit);
}

处理完成后,formattedLabels中的元素就会变成< 5 km、< 10 miles这类符合需求的文本。

内容的提问来源于stack exchange,提问作者Shahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:35:10