Character.toUpperCase() 和 Character.toTitleCase() 之间有什么区别

2022-09-04 22:30:22

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

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

到上一个案例

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

通常,String.toUpperCase() 应该用于将字符映射到大写。字符串大小写映射方法与字符大小写映射方法相比有几个优点。字符串大小写映射方法可以执行区分区域设置的映射、上下文相关映射和 1:M 字符映射,而字符大小写映射方法则不能。

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

toTitleCase

使用 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

是否有任何我没有考虑的关键差异,并且可能导致我的代码在某些特殊情况下的行为与预期不同?


注意我不认为这是字符串大写的副本 - 更好的方法。因为在这个问题上,问题在于字符串大写的性能,而不是像这个问题中那样的字符的大写和标题大小写。


答案 1

标准的ASCII字符太无聊了!这里有一些更令人兴奋的事情:

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

现场演示。


答案 2

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

通常,String.toUpperCase() 应该用于将字符映射到大写。字符串大小写映射方法与字符大小写映射方法相比有几个优点。

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

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