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

Nob*_*ial 54 eclipse android android-lint

我最初这样叫String.format:

return String.format("%s %f %f", anotherString, doubleA, doubleB);
Run Code Online (Sandbox Code Playgroud)

这使Android Lint生成此警告:

隐式使用默认语言环境是一个常见的错误来源:使用String.format(Locale,...)代替

所以我Locale.US根据我在http://developer.android.com/reference/java/util/Locale.html上的"警惕默认语言环境"部分中的内容将其更改为显式使用:

return String.format(Locale.US, "%s %f %f", anotherString, doubleA, doubleB);
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ado 54

清洁和重建项目应该有效.

顺便说一下,你可能想用Locale.getDefault()"照顾"不是用英文写的文字.

  • 他特意试图避免违约. (7认同)
  • 至于我理解的地方,他试图避免它只是因为文档中的"警惕默认语言环境"部分.尽管如此,我告诉他他"可能想要使用"它,因为它确实告诉你应该知道在机器到机器通信中使用默认语言环境. (3认同)
  • 在这种情况下,我总是使用Locale.ROOT.亚历杭德罗说,清洁将摆脱棉绒警告. (3认同)

Pau*_*nça 8

大小写转换时隐含的默认语言环境

调用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


Pra*_*esh 6

当我用格式提到语言环境时,棉绒警告就消失了。

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