我正在尝试关注代码
String s1 = new String ("ß.cfg");
System.out.println (s.toUpperCase());
我得到的输出是SS.CFG
,因为Unicode没有定义ß的大写版本,而我希望输出为ß.CFG
。
有什么方法可以实现这一点 提前致谢
答案 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字符映射,而字符大小写映射方法则不能。