字符串资源文件中的 format 语句

我在通常的 strings.xml 资源文件中定义了如下字符串:

<string name="hello_world"> HELLO</string>

是否可以定义如下所示的格式字符串

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

在 strings.xml 资源文件中?

我试图逃避特殊字符,但它不工作。

159359 次浏览

应该将 formatted="false"添加到字符串资源中


这里有一个例子

在你的 strings.xml:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

在您的代码中:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));

您不需要在 XML 中使用 formatted="false"。您只需要使用完全限定的字符串格式标记 -%[POSITION]$[TYPE](其中 [POSITION]是属性位置,[TYPE]是变量类型) ,而不是简短的版本,例如 %s%d

引自 Android Docs: 字符串格式和样式:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

在此示例中,格式字符串有两个参数: %1$s是 字符串和 %2$d是一个十进制整数 申请中的论点如下:

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

引自 Android 文档:

如果需要使用 < code > String.format (String, 对象...) ,然后可以通过将格式参数放入 例如,使用以下资源:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

在本例中,格式化字符串有两个参数: %1$s是一个字符串 %2$d是十进制数。可以用参数格式化字符串 如下:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

内部文件 strings.xml定义一个如下字符串资源:

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

在您的代码中(假设它继承自 Context) ,只需执行以下操作:

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

(与 本地电脑人Giovanny Farto M.的答案相比,不需要 String.format 方法。)

对我来说,在 Kotlin 就是这样:

我的 string.xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

我的同学 KT

 var formatPrice: CharSequence? = null
var unitPrice = 9990
formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
Log.d("Double_CharSequence", "$formatPrice")

D/Double _ CharSeries: 价格: 99,90美元

为了更好的结果,我们可以这样做

 <string name="price_to_string">Price:U$ %1$s</string>


var formatPrice: CharSequence? = null
var unitPrice = 199990
val numberFormat = (unitPrice/100.0).toString()
formatPrice = String.format(context.getString(R.string.price_to_string), formatValue(numberFormat))


fun formatValue(value: String) :String{
val mDecimalFormat = DecimalFormat("###,###,##0.00")
val s1 = value.toDouble()
return mDecimalFormat.format(s1)
}


Log.d("Double_CharSequence", "$formatPrice")

D/Double _ CharSequence: Price: U $1.999,90价格: U $1.999,90