为什么Android Lint警告String.当显式使用locale . us时,使用默认语言环境格式化



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

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

让Android Lint生成这个警告:

隐式地使用默认语言环境是bug的常见来源:format(Locale,…)代替

所以我改变它显式地使用Locale.US,基于我在http://developer.android.com/reference/java/util/Locale.html上读到的"警惕默认语言环境"一节:

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

为什么Android Lint仍然生成相同的警告?我必须在Eclipse中清理项目以摆脱它,而大多数警告只是在错误行修复后消失。我不确定我是否做错了什么。

清理和重建项目应该可以工作。

顺便说一句,你可能想用Locale.getDefault()来"照顾"非英语文本。

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

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

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

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

如果您希望方法只执行ASCII替换,例如转换enum名称,则调用String#toUpperCase(Locale.US)如果您确实想使用当前语言环境,请调用String#toUpperCase(Locale.getDefault())

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

只需添加您的区域设置;对于英语区域设置,

返回String.format(语言环境。英文,"%s %f %f", anotherString, doubleA, doubleB);

最新更新