提问者:小点点

特征. toUpperCase()和特征.toTitleCase()有什么区别


我正在重构我的一些旧代码,然后我发现我在某个时候使用了Charter. toTitleCase()方法,并且忍不住想知道Charter.toUpperCase()是否会更好。

我读了他们的描述,没有看到任何基本的区别:

toUpperCase

使用UnicodeData文件中的大小写映射信息将字符参数转换为大写。请注意,对于某些字符范围,特别是那些符号或表意文字,Charter. isUpperCase(Charter.toUpperCase(ch))并不总是返回true。

一般来说,String. toUpperCase()应该用于将字符映射为大写。字符串大小写映射方法比Character大小写映射方法有几个好处。字符串大小写映射方法可以执行区域敏感映射、上下文敏感映射和1:M字符映射,而Character大小写映射方法不能。

注意:此方法无法处理补充字符。要支持所有Unicode字符,包括补充字符,请使用toUpperCase(int)方法。

toTitleCase

使用UnicodeData文件中的大小写映射信息将字符参数转换为titlecase。如果字符没有显式的titlecase映射,并且根据UnicodeData,它本身不是titlecase char,则大写映射作为等效的titlecase映射返回。如果char参数已经是titlecase char,则将返回相同的char值。请注意,对于某些字符范围,Charter. isTitleCase(Charter.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

是否有任何关键差异是我没有考虑到的,并且可能导致我的代码在某些特殊情况下表现得超出预期?

注意:我不认为这是字符串大写的重复-更好的方式。因为在那个问题中,问题在于字符串大写的性能,而不是像这个问题中那样与字符的大写和标题大小写有关。


共2个答案

匿名用户

标准ASCII字符太无聊了!这里有更令人兴奋的东西:

System.out.println(Character.toTitleCase('dz'));  // Dz
System.out.println(Character.toUpperCase('dz'));  // DZ

现场演示。

匿名用户

我在这里没有看到任何“真正”的差异,我认为最好不要过度考虑小细节。我想指出这里唯一有助于解决“问题”的一行。

一般来说,String. toUpperCase()应该用于将字符映射为大写。字符串大小写映射方法比Character大小写映射方法有几个好处。

文档String. toUpperCase():https://www.w3schools.com/jsref/jsref_touppercase.asp

如果有更多内幕消息,其他人应该发表评论。