Java String 类里的 toLowerCase() 返回字符串的小写形式,在某些语言环境下可能会得到意料之外的结果。
说明
首先熟悉下用法(省略类和包名等):
1 | System.out.println("IT".toLowerCase()); // 输出结果为:it |
查阅 toLowerCase() 官方文档 ,发现它实际调用的是 toLowerCase(Locale.getDefault()),而如果你的程序不幸运行在了土耳其语言环境下,则会出现以下情况:
1 | Locale locale = Locale.forLanguageTag("tr-TR"); // 手动设置 locale 为土耳其 |
仔细看,输出结果 “it” 的 “i” 少了头上的一点,所以 equals() 的比较结果肯定为 false。这是因为,不同语言环境下的字符集可能是不一样的。因此,不带参数的 toLowerCase() 可以用于文本显示,不能用于逻辑判定。如果涉及到逻辑判定,可以使用带参数的 toLowerCase(Locale locale),给它指定一个语言环境:
1 | System.out.println("IT".toLowerCase(Locale.US)); // 输出结果为:it |
这样就能保证得到的结果是确定的,不会根据当前地区语言环境发生变化。类似的方法还有 toUpperCase(),原理是一样的,不再赘述。