格式字符串XXX不是有效的格式字符串,因此不应将其传递给String.format

时间:2016-11-23 13:31:08

标签: java android string android-resources

我在资源中有android app和这个字符串:

<string name="create_group_select_people">Select up to %1$d people!</string>

这是从片段中调用的:

Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);

但我收到了错误:

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

我无法理解错误是什么?当我启动应用程序时 - 它按字面意思显示&#34;选择最多%1美元的人!&#34;

13 个答案:

答案 0 :(得分:23)

我刚刚复制了代码,效果很好。 所以你可能需要检查其他地方,这是我的建议。

  1. 清洁项目
  2. 检查多语言文件
  3. 或者像其他人一样使用String.format

答案 1 :(得分:9)

将资源中的参数格式设置为true:

<string name="some_text" formatted="true">
    Use for String.format method. Parameter one: %s1
</string>

并使用这种方式:

String.format(context.getString(R.string.some_text,"value 1"))

或这种方式:

context.getString(R.string.some_text,"value 1"))

注意:只有带占位符的字符串才应将formatted标志设置为true

答案 2 :(得分:6)

如果您在多个字符串文件(翻译)中使用相同的字符串,则会显示此错误,但是其中一个没有正确的格式,例如缺少“%s”或“%1 $ s”,将使用在下面的行中放置通过的参数(例如:“ countMax”)。

getResources().getString(R.string.create_group_select_people, countMax)

因此,在尝试上述任何其他答案之前,请先进行检查。

答案 3 :(得分:4)

为了其他人可能找到此线程,此警告的一个可能原因是,您在字符串资源文件中定义了多种语言,并且未在其中的一种或多种中指定格式参数。

例如,如果在values文件夹中有一个strings.xml,在values-es文件夹中有另一个strings.xml,但是您仅在values文件夹中将format参数添加到strings.xml,则警告将由于values-es文件夹中strings.xml的字符串资源中缺少格式参数而被触发。

答案 4 :(得分:3)

尝试=CallSkype(),它为我解决了这个问题。

答案 5 :(得分:1)

尝试执行“清理项目”,然后关闭并重新打开Android Studio。

为我修复了该问题,它看起来像一些Android Studio / Lint的小错误。

答案 6 :(得分:0)

您可能缺少String类的格式方法,如果您在TextView中设置它,正确的方法是:

textView.setText(String.format(getResources().getString(R.string.create_group_select_people), countMax));

答案 7 :(得分:0)

您需要字符串格式化程序。请从

更改以下代码
 getResources().getString(R.string.create_group_select_people, countMax);

String temp =  String.format(getResources().getString(R.string.create_group_select_people), countMax);

有关详细信息refer

答案 8 :(得分:0)

制作一个函数,并将代码放入其中,并在函数之前添加此@SuppressLint("StringFormatInvalid")。希望对您有所帮助。

答案 9 :(得分:0)

为使字符串的格式正确:

String.format(Locale.ENGLISH, itemView.context.getString(R.string.XXX), "%17") 

此外,特殊字符也不必干扰参数的注入。为此,请考虑exhaust outlets中的特殊字符

发件人<string name="XXX">% %1$s</string>

<string name="XXX">%1$s</string>

最后XXX是“%17”

祝你好运。

Source

答案 10 :(得分:0)

在我的情况下,通过重新启动使缓存无效并没有帮助,但是在其他语言环境中使用一致的格式设置参数(例如%s)解决了该问题。我希望这对以后的人会有所帮助。

答案 11 :(得分:0)

我遇到了同样的问题,但是起源不同。我的应用程序有几种语言,在一种翻译中,没有“%”而是“ $”符号。仍然有效,除了使用这种特定语言外,我在使用字符串的相应行中收到了此提示。

答案 12 :(得分:0)

如果它显示红色错误,那么像这样添加字符串值就可以了。

如果你想要字符串格式:

   <string name="msg_token_fmt" formatted="true"> %s
</string>

如果你想要浮动格式浮动:

<string name="msg_token_fmt" formatted="true"> %f
</string>

如果你想要数字格式:

  <string name="msg_token_fmt" formatted="true"> %d
    </string>