如何在android 4.2中使用toUppercase(locale)?

时间:2013-06-25 03:06:35

标签: android

enter image description here我使用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。 有谁知道如何删除此错误?为什么它现在是使用这种方法的首选方式?

6 个答案:

答案 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}}