我最初是这样称呼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);