使用java中的toUpperCase()将ß.cfg转换为大写

时间:2012-02-03 11:05:35

标签: java

我正在尝试关注代码

String s1 = new String ("ß.cfg");
System.out.println (s.toUpperCase());

我得到的输出是SS.CFG,因为Unicode没有定义ß的大写版本,而我希望输出为ß.CFG

有什么方法可以实现这一点 提前致谢

5 个答案:

答案 0 :(得分:6)

“ß”字符相当于“ss”(例如在德语中使用),并且这是在您的区域设置(您在应用中使用的区域设置)中定义的。

您可以尝试使用不同的Locale进行一些实验:

toUpperCase(Locale locale) 

编辑:正如用户所说,这种方法无效,可能的workaroud(不是很优雅)是:

    String s1 = new String ("auß.cfg").replace('ß', '\u9999');
    System.out.println (s1.toUpperCase(Locale.UK).replace('\u9999', 'ß'));

答案 1 :(得分:5)

toUpperCase( Locale )的文档明确指出将会发生这种情况:

  

由于大小写映射并不总是1:1的char映射,因此生成的String可能与原始String的长度不同。

     

小写字母s - >两个字母:SS

答案 2 :(得分:3)

Java实现只是遵循Unicode规范所说的。 Unicode说这个:

# ================================================================================
# Unconditional mappings
# ================================================================================

# The German es-zed is special--the normal mapping is to SS.
# Note: the titlecase should never occur in practice. It is equal to titlecase(uppercase(<es-zed>))

00DF; 00DF; 0053 0073; 0053 0053; # LATIN SMALL LETTER SHARP S

参考:http://unicode.org/Public/UNIDATA/SpecialCasing.txt

如果要实现与Unicode不同的大写转换形式,则需要自己指定并实现它。


(如果你想看到一群人在关于“大写ß”的领子下变热,请阅读这封电子邮件主题 - http://unicode.org/mail-arch/unicode-ml/y2007-m05/0007.html

答案 3 :(得分:1)

答案 4 :(得分:0)

看起来Characeter.toUpperCase()忽略了这些规则,因此您可以使用它来实现所需的转换:

  

字符串大小写映射方法比字符大小写映射方法有几个好处。字符串大小写映射方法可以执行区域设置敏感的映射,上下文相关的映射和1:M字符映射,而字符大小写映射方法则不能。