16

我有一个这样的字符串:

<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

为什么?

4

5 回答 5

28

你的字符串应该是

<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...)执行格式本身。

于 2015-12-22T03:14:34.577 回答
9

对于百分比,以下内容对我有用。

<string name="score_percent">%s%%</string>


getString(R.string.score_percent,"20")

如果您正在处理整数,请将 s 替换为 d

<string name="score_percent">%d%%</string>
于 2016-09-07T08:23:49.220 回答
2

对于那些仍在寻找这个答案的人,正如Blackbelt 发布的链接所暗示的那样,字符串的正确格式是:

<string name="q_title">Item %1$d of %2$d</string>
于 2015-07-06T14:19:21.400 回答
2

如果您需要格式化字符串,则可以通过将格式参数放入字符串资源中来实现,如以下示例资源所示。

<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);
于 2018-07-28T12:43:32.563 回答
1

注意转义所有特殊字符

我遇到了这个字符串的问题,因为我忘了在结尾处转义百分比字符“%”。

<string name="market_variation_formatter">%s %</string> 

好的转义字符串是:

<string name="market_variation_formatter">%s \%</string>
于 2016-04-27T13:56:09.530 回答