Character.toUpperCase() 和 Character.toTitleCase() 之间有什么区别
我正在重构我的一些旧代码,然后我发现我在某个时候使用了方法,忍不住想知道是否会更好。Character.toTitleCase()
Character.toUpperCase()
我阅读了他们的描述,没有看到任何基本区别:
使用 UnicodeData 文件中的大小写映射信息将字符参数转换为大写。请注意,Character.isUpperCase(Character.toUpperCase(ch)) 并不总是对某些字符范围返回 true,尤其是那些作为符号或表意文字的字符。
通常,String.toUpperCase() 应该用于将字符映射到大写。字符串大小写映射方法与字符大小写映射方法相比有几个优点。字符串大小写映射方法可以执行区分区域设置的映射、上下文相关映射和 1:M 字符映射,而字符大小写映射方法则不能。
注意:此方法无法处理增进字符。若要支持所有 Unicode 字符(包括增补字符),请使用 toUpperCase(int) 方法。
和
使用 UnicodeData 文件中的大小写映射信息将字符参数转换为标题大小写。如果字符没有显式标题大小写映射,并且根据 UnicodeData 本身不是标题大小写字符,则大写映射将作为等效的标题大小写映射返回。如果 char 参数已经是标题大小写字符,则将返回相同的 char 值。请注意,Character.isTitleCase(Character.toTitleCase(ch)) 对于某些字符范围并不总是返回 true。
注意:此方法无法处理增进字符。若要支持所有 Unicode 字符(包括增补字符),请使用 toTitleCase(int) 方法。
然后我试图像这样测试它们:
public class Test {
public static void main(String... args) {
String originalString = "abcdefghijklmnopqrstuvwxyz123546-.,/*&%+";
StringBuilder upperCaseStringBuilder = new StringBuilder();
StringBuilder titleCaseStringBuilder = new StringBuilder();
for (int i = 0; i < originalString.length(); i++) {
upperCaseStringBuilder.append(Character.toUpperCase(originalString.charAt(i)));
titleCaseStringBuilder.append(Character.toTitleCase(originalString.charAt(i)));
}
System.out.println("Original String : " + originalString);
System.out.println("UpperCase result: " + upperCaseStringBuilder.toString());
System.out.println("TitleCase result: " + titleCaseStringBuilder.toString());
}
}
这是输出:
Original String : abcdefghijklmnopqrstuvwxyz123546-.,/*&%+
UpperCase result: ABCDEFGHIJKLMNOPQRSTUVWXYZ123546-.,/*&%+
TitleCase result: ABCDEFGHIJKLMNOPQRSTUVWXYZ123546-.,/*&%+
所以我无法理解这两种方法之间的区别。正如我之前所说,我在代码中使用了大写.toTitleCase()
String
是否有任何我没有考虑的关键差异,并且可能导致我的代码在某些特殊情况下的行为与预期不同?
注意:我不认为这是字符串大写的副本 - 更好的方法。因为在这个问题上,问题在于字符串大写的性能,而不是像这个问题中那样的字符的大写和标题大小写。