【问题标题】:Invalid format String containing %包含 % 的无效格式字符串
【发布时间】:2017-02-02 09:49:46
【问题描述】:

我已阅读有关此链接警告的其他帖子,但他们没有解决我的问题,我仍然不明白我做错了什么。

在默认文件strings.xml中,我有:

 <string name="rating_dialog">You\'re about to rate this app with %s stars.</string>

稍后,我在覆盖 onClick 方法中调用它:

 v.getContext().getString(R.string.rating_dialog, String.valueOf(rating))

它看起来像:

You're about to rate this app with {String.valueOf(rating)} stars.

链接警告:

Format string is not a valid format string so it should not be passed to string.format

注意:

vViewratingint 值。

我检查了其他 strings.xml 文件中的其他语言,所有翻译似乎都正常。

已解决:对于印地语 string.xml,只有 % 而不是 %s。

【问题讨论】:

标签: java android string string-formatting getstring


【解决方案1】:

您需要为您在XML 中定义的每个占位符分配一个位置。

然后你的字符串变成:

<string name="rating_dialog">You\'re about to rate this app with %1$s stars.</string>

【讨论】:

  • 谢谢,我应用了这个(并检查了不可翻译,因此翻译不会产生影响)但仍然是同样的问题。
【解决方案2】:

你可以这样做:

在string.xml中:

如果要分配整数值,则使用 "%1$d",如果是字符串,则使用 "%1$s"

1 用于定义位置。如果你想使用多个值,那么你可以使用 "%1$d","%2$d",..etc

<string name="rating_dialog">You\'re about to rate this app with %1$d stars.</string>

然后在代码中这样做:

v.getContext().getString(R.string.rating_dialog, rating);

希望对你有帮助。

【讨论】:

  • 谢谢,我应用了您的所有步骤,使用 %1$d 和 %1$s 并在翻译编辑器中检查了“不可翻译”(因此翻译不会产生影响)但仍然是同样的问题.
  • 你可以试试像 String message = getString(R.string.rating_dialog, rating); ?
  • 问题是印地语 strings.xml,而不是 %s,只有 %。但是再次感谢您
猜你喜欢
  • 2017-11-16
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2015-07-23
  • 2021-11-12
  • 2019-07-15
  • 2011-03-13
  • 1970-01-01
相关资源
最近更新 更多