这个格式字符串出了什么问题?

时间:2013-07-06 12:10:00

标签: java android string format

我有一个这样的字符串:

<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

为什么?

5 个答案:

答案 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);