为什么在明确使用Locale.US时,Android Lint会警告String.format使用默认语言环境?

74

我最初是这样调用String.format的:

return String.format("%s %f %f", anotherString, doubleA, doubleB);

这导致Android Lint生成了以下警告:

隐式使用默认语言环境是错误的常见来源:请改用String.format(Locale, ...)。

因此,我根据在http://developer.android.com/reference/java/util/Locale.html“小心默认语言环境”部分所读到的内容,将其显式地更改为使用Locale.US

return String.format(Locale.US, "%s %f %f", anotherString, doubleA, doubleB);
为什么Android Lint仍然会生成相同的警告?我必须在Eclipse中清除项目才能摆脱它,而大多数警告只要修复有问题的行就会消失。我不确定自己是否做错了什么。

1
Lint警告并不是错误。它只是在尝试告诉你有关性能、翻译和类似问题的信息。我在一些只针对特定语言的应用程序中也会收到此警告,但是你可以通过转到Window>Preferences>Android>Lint Error Checking来禁用lint。我相信在最坏的情况下可能会有某些设备根本没有Locale.US可用,因此可能会引起一些问题。虽然到目前为止我还没有遇到过这样的问题。 - Milan
4个回答

66

清理并重新构建项目应该可以解决问题。

顺便说一下,您可能需要使用Locale.getDefault()来“处理”非英文编写的文本。


8
他特意试图避免默认。 - nitind
5
根据我的理解,他试图避免使用默认语言环境,这是因为文档中的“谨慎使用默认语言环境”部分。尽管如此,我告诉他他可能需要使用它,因为它确实提醒你在机器与机器之间的通信中应该注意使用默认语言环境。 - Alejandro Colorado
4
我通常使用Locale.ROOT来处理这种情况。而且,就像Alejandro所说的那样,清洗将消除lint警告。 - suomi35
1
公共静态字符串格式化方法(String format, Object... args) { 返回格式(Locale.getDefault(), format, args); } - Manza

18

当我在格式化字符串中使用Locale.US时,语法检查警告就消失了。

String.format(Locale.US,"%02d", selectedInt);


12

在大小写转换时暗含默认语言环境

在不指定显式语言环境的情况下调用 String#toLowerCase()#toUpperCase() 是一个常见的错误来源。原因是这些方法将使用用户设备上的当前语言环境,即使在开发应用程序时代码似乎正常工作,也会在某些语言环境下失败。例如,在土耳其语环境中,i 的大写替换不是 I。

如果要让这些方法执行 ASCII 替换,例如转换枚举名称,请调用 String#toUpperCase(Locale.US)。如果您真的想使用当前语言环境,请调用 String#toUpperCase(Locale.getDefault())

http://developer.android.com/reference/java/util/Locale.html#default_locale


3

只需添加您的地区(Locale);对于英文本土设置,

返回String.format(Locale.ENGLISH,"%s %f %f", 另一个字符串, 双精度A, 双精度B);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接