0%

Java toLowerCase() 语言问题

Java String 类里的 toLowerCase() 返回字符串的小写形式,在某些语言环境下可能会得到意料之外的结果。

说明

首先熟悉下用法(省略类和包名等):

1
System.out.println("IT".toLowerCase());                     // 输出结果为:it

查阅 toLowerCase() 官方文档 ,发现它实际调用的是 toLowerCase(Locale.getDefault()),而如果你的程序不幸运行在了土耳其语言环境下,则会出现以下情况:

1
2
3
4
Locale locale = Locale.forLanguageTag("tr-TR");             // 手动设置 locale 为土耳其
// Locale locale = new Locale("tr", "TR"); // 两种设置方式是一样的
System.out.println("IT".toLowerCase(locale)); // 输出结果为:ıt
System.out.println("IT".toLowerCase(locale).equals("it")); // 输出结果为:false

仔细看,输出结果 “it”“i” 少了头上的一点,所以 equals() 的比较结果肯定为 false。这是因为,不同语言环境下的字符集可能是不一样的。因此,不带参数的 toLowerCase() 可以用于文本显示,不能用于逻辑判定。如果涉及到逻辑判定,可以使用带参数的 toLowerCase(Locale locale),给它指定一个语言环境:

1
System.out.println("IT".toLowerCase(Locale.US));            // 输出结果为:it

这样就能保证得到的结果是确定的,不会根据当前地区语言环境发生变化。类似的方法还有 toUpperCase(),原理是一样的,不再赘述。

觉得文章有帮助,打赏1元鼓励一下作者