我有一个这样的字符串:
<string name="q_title" formatted="false">Item %d of %d</string>
我在String.format中使用它,如下所示:
String log = String.format(getString(R.string.q_title), 100, 500);
到目前为止,我发现输出没有问题。
然而,Android Studio中的代码检查给了我:
格式字符串'q_title'不是有效的格式字符串,所以它 不应该传递给String.format
为什么?
答案 0 :(得分:26)
你的字符串应该是
<string name="q_title" formatted="false">Item %1$d of %2$d</string>
和代码
String log = getString(R.string.q_title, 100, 500);
当你有多个参数时,需要用1 $,2 $ ... n $标记它们。在阿拉伯语中,顺序是相反的,所以他们需要知道如何正确地改变它。
getString(id, args...)
执行格式化。
答案 1 :(得分:6)
对于百分比,以下内容对我有用。
<string name="score_percent">%s%%</string>
getString(R.string.score_percent,"20")
如果你正在处理整数,请用d替换s
<string name="score_percent">%d%%</string>
答案 2 :(得分:2)
对于仍在寻找此答案的人,正如link that Blackbelt posted所暗示的那样,字符串的正确格式为:
<string name="q_title">Item %1$d of %2$d</string>
答案 3 :(得分:1)
小心逃脱所有特殊字符
我遇到了这个字符串的问题,因为我忘了在结尾处转义百分比字符“%”。
<string name="market_variation_formatter">%s %</string>
好逃脱的字符串是:
<string name="market_variation_formatter">%s \%</string>
答案 4 :(得分:0)
如果需要格式化字符串,则可以通过将格式参数放在字符串资源中来实现,如以下示例资源所示。
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
在此示例中,格式字符串具有两个参数:%1 $ s是一个字符串,%2 $ d是一个 十进制数。然后,通过调用getString(int,Object ...)格式化字符串。例如:
String text = getString(R.string.welcome_messages, username, mailCount);