toUpperCaseLocale()vs toUpperCase() - 现在定位到Android 4.2

The*_*ter 19 android

由于我针对Android的较新SDK版本,我收到了这行代码的警告:

return getString(R.string.usertab1).toUpperCase()
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在它上面时,它说:

隐式使用默认语言环境是常见的错误来源:toUpperCase(Locale)改为使用.

有谁知道如何删除此错误?为什么它现在是使用这种方法的首选方式?

我得到这个答案,使用toUpperCase(Locale)但无法实现它.Locale对象来自哪里?

Eri*_*ric 32

您可以显式使用默认语言环境:

return getString(R.string.usertab1).toUpperCase(Locale.getDefault());
Run Code Online (Sandbox Code Playgroud)

基本上,您不希望隐式允许设备使用默认设置,因为这可能意味着您只是忽略了它可能是一个问题的事实.对于机器可读的内容,您可能希望指定特定的区域设置(例如Locale.ENGLISH),以确保始终从数据中获得所需的可重用性.为了显示用户,显式指定默认语言环境应该没问题.

如需更完整的阅读:

一个常见的错误是在生成意味着机器可读的输出时隐式使用默认语言环境.这往往适用于开发人员的测试设备(特别是因为许多开发人员使用en_US),但在用户处于更复杂的语言环境的设备上运行时会失败.

例如,如果要格式化整数,则某些区域设置将使用非ASCII十进制数字.另一个例子,如果你要格式化浮点数,一些语言环境将','用作小数点和'.'数字分组.这对于人类可读输出是正确的,但如果呈现给另一台计算机可能会导致问题(parseDouble(String)例如,无法解析这样的数字).您还应该警惕没有使用Locale的过载toLowerCase()toUpperCase()重载:例如,在土耳其,字符'i''I'不会转换为'I''i'.这是土耳其语文本(例如用户输入)的正确行为,但不适用于HTTP标头.

- Locale开发人员文档

  • 我不得不进行Project/Clean ...以在更改为`.toLowerCase(Locale.ENGLISH)`之后删除警告. (3认同)