我正在重构我的一些旧代码,然后我发现我在某个时候使用了Character.toTitleCase()方法,并且忍不住想知道Character.toUpperCase()是否会更好。
我读了他们的描述,没有看到任何基本的区别:
toUpperCase 使用UnicodeData文件中的大小写映射信息将字符参数转换为大写。请注意,对于某些字符范围,特别是那些符号或表意文字,Character.isUpperCase(Character.toUpperCase(ch))并不总是返回true。 通常,应该使用String.toUpperCase()将字符映射为大写。字符串案例映射方法比字符案例映射方法有几个优点。字符串案例映射方法可以执行区域敏感映射、上下文敏感映射和1:M字符映射,而字符大小写映射方法则不能。 注意:此方法无法处理补充字符。若要支持所有Unicode字符,包括补充字符,请使用toUpperCase(int)方法。
和
toTitleCase 使用UnicodeData文件中的大小写映射信息将字符参数转换为标题。如果一个字符没有显式的点阵映射,而且根据UnicodeData本身也不是一个点阵字符,则大写映射作为一个等价的点阵映射返回。如果char参数已经是一个标题字符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。
在某些特殊情况下,是否存在一些我没有考虑到的关键差异,这可能导致我的代码在某些特殊情况下的行为不同于预期?
Note:我不认为这是的重复。因为在这个问题中,问题在于字符串大写的性能,而不是字符的大写和标题大小写。
发布于 2017-12-19 12:48:25
发布于 2017-12-19 12:48:02
我看不出有什么“真正的”差别,我认为最好不要过分考虑细节。我想指出这里唯一的一行,应该有助于解决这里的“问题”。
一般来说,应该使用String.toUpperCase() 将字符映射为大写。字符串案例映射方法比字符大小写映射方法有几个优点。
文档String.toUpperCase():touppercase.asp
如果其他人有更多的内部信息,他们应该发表评论。
https://stackoverflow.com/questions/47887244
复制相似问题