我使用android 4.2 SDK,我在这行代码上收到警告:
String text0 = tagalogText.getText().toString();
String textA = text0.substring(0, 1).toUpperCase() + text0.substring(1).toLowerCase();
当我将鼠标悬停在它上面时,它会说:
Implicitly using the default locale is a common source of bugs: Use toUpperCase(Locale) instead.
和
隐式使用默认语言环境是一个常见的错误来源:改为使用toLowerCase(Locale)。
我从Java复制代码,而不是Java for android。 有谁知道如何删除此错误?为什么它现在是使用这种方法的首选方式?
答案 0 :(得分:5)
只需要清理项目。
我遇到了同样的麻烦。我没有依赖默认的语言环境,并且明确地尝试了Locale.US和Locale.English,但仍然得到了黄色lint警告。清洁后离开。
string.toLowerCase(Locale.ENGLISH);
答案 1 :(得分:2)
它是一个lint 警告,而不是错误。原因是默认语言环境应该用于面向用户的数据 - 如果您要渲染用户可能希望以特定于其所在地的样式/格式看到的内容。
您需要决定使用默认语言环境是否合适:
如果这是一个将在幕后使用的字符串和,您的架构希望此字符串在世界各地的所有设备上保持一致,那么您应该明确指定一个区域设置 - 通常Locale.US
如果它是面向用户的字符串或,那么您的架构并不关心其他设备上是否有所不同(即它只是它的唯一性在内部使用,并且预期不会出现指定情况以外的特定格式),那么您可以安全地忽略lint警告。
答案 2 :(得分:0)
尝试使用
text0.substring(0, 1).toUpperCase(Locale.ENGLISH);
来自doc here
常见的错误是隐式使用默认语言环境 产生输出意味着机器可读。这往往会起作用 开发人员的测试设备(特别是因为很多开发人员 使用en_US),但在用户所在的设备上运行时会失败 复杂的语言环境。
例如,如果您要格式化整数,则会使用某些区域设置 非ASCII十进制数字。另一个例子,如果您正在格式化 浮点数一些语言环境将使用','作为小数点 和'。'用于数字分组。这对于人类可读的输出是正确的, 但如果出现在另一台计算机上,可能会引起问题 (例如,parseDouble(String)无法解析这样的数字)。您 还应该警惕toLowerCase()和toUpperCase()重载 不采用Locale:例如,在土耳其,人物'我' 并且'我'不会被转换为'我'和'我'。这是正确的 土耳其文本的行为(例如用户输入),但不适合, 比方说,HTTP标题。
答案 3 :(得分:0)
这意味着依赖于默认语言环境可能会出现语言问题,该语言环境因系统而异。请改用:
text0.substring(0, 1).toUpperCase(Locale.US);
答案 4 :(得分:0)
你没有表明你得到了答案,所以试试这个(类似的东西对我有用):
text0 = text0.substring(0, 1).toUpperCase();
text1 = text0.substring(1).toLowerCase();
String textA = text0 + text1;
似乎任务很重要。
让我知道它是否有效。
小心。
答案 5 :(得分:0)
这就是我解决它的方法:
{{1}}