7

在此处输入图像描述我使用的是 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 中为 android 复制代码。有谁知道如何消除这个错误?为什么现在是使用这种方法的首选方式?

4

6 回答 6

5

只需要清理项目

我有同样的麻烦。我没有依赖默认语言环境,并明确尝试了 Locale.US 和 Locale.English,但仍然收到黄色 lint 警告。打扫完就走了。

string.toLowerCase(Locale.ENGLISH);
于 2014-03-15T08:28:49.390 回答
2

这是一个 lint警告,而不是错误。原因是默认语言环境应该用于面向用户的数据 - 如果您正在渲染用户可能希望以特定于其位置的样式/格式看到的内容。

您需要决定是否适合使用默认语言环境:

  • 如果这是一个将在幕后使用的字符串,并且您的体系结构希望该字符串在全球所有设备上统一,那么您应该明确指定一个区域设置 - 通常是 Locale.US

  • 如果它是一个面向用户的字符串,或者您的体系结构不关心它在其他设备上是否不同(即它仅在内部使用,并且预计不会采用特定格式以外的特定格式),那么您可以放心地忽略棉绒警告。

于 2014-03-15T08:39:59.970 回答
1

这就是我解决它的方法:

string.toUpperCase(getResources().getConfiguration().locale));
于 2015-10-19T22:23:03.663 回答
0

你没有表示你得到了答案,所以试试这个(类似的东西对我有用):

text0 = text0.substring(0, 1).toUpperCase();
text1 = text0.substring(1).toLowerCase();
String textA = text0 + text1;

看来任务很关键。

让我知道它是否有效。

小心。

于 2013-06-30T21:43:47.817 回答
0

尝试使用

text0.substring(0, 1).toUpperCase(Locale.ENGLISH);

从这里的文档

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

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

于 2013-06-25T03:11:09.537 回答
0

这意味着依赖默认区域设置可能会出现语言问题,这在系统之间会有所不同。改用这个:

text0.substring(0, 1).toUpperCase(Locale.US);
于 2013-06-25T03:12:14.417 回答