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

我最初是这样称呼 String.format的:

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

这使得 Android Lint 产生了这样的警告:

隐式使用默认语言环境是常见的 bug 来源: 改为使用 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 中清理项目,以摆脱它,因为大多数警告只要修复了违规行就会立即消失。我不知道我是不是做错了什么。

43323 次浏览

清理和重建项目应该起作用。

顺便说一下,你可能想使用 Locale.getDefault()来“照顾”的文本不用英语写。

大小写转换中的隐式默认区域设置

在没有指定显式区域设置的情况下调用 String#toLowerCase()#toUpperCase()是常见的 bug 来源。原因是这些方法将使用用户设备上的当前语言环境和 尽管在开发应用程序时代码看起来工作正常,但在某些地区它会失败。例如,在土耳其语言环境中,i 的大写替换不是 I。

如果希望这些方法只执行 ASCII 替换,例如转换枚举名称,则调用 String#toUpperCase(Locale.US)如果您确实希望使用当前的区域设置,请改为调用 String#toUpperCase(Locale.getDefault())

Http://developer.android.com/reference/java/util/locale.html#default_locale

当我提到带有格式的区域时,lint 警告就消失了。

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

只需添加您的语言环境,

Return String.format (Locale.ENGLISH,“% s% f% f”,another String,doubleA,doubleB) ;