[英]converting ß.cfg to upper case using toUpperCase() in java
我正在尝试以下代码
String s1 = "ß.cfg";
System.out.println (s.toUpperCase());
output 我得到的是SS.CFG
,因为 Unicode 没有定义 ß 的大写版本,而我希望 output 为ß.CFG
。
有什么办法可以实现吗?
“ß”字符相当于“ss”(例如在德语中使用),这在您的语言环境(您在应用程序中使用的语言环境)中定义。
您可以尝试使用以下方法对不同的 Locale 进行一些实验:
toUpperCase(Locale locale)
编辑:正如用户所说,此方法无效,可能的解决方法(不是很优雅)是:
String s1 = new String ("auß.cfg").replace('ß', '\u9999');
System.out.println (s1.toUpperCase(Locale.UK).replace('\u9999', 'ß'));
toUpperCase( Locale )
的文档明确指出这将发生:
由于大小写映射并不总是 1:1 字符映射,因此生成的字符串可能与原始字符串的长度不同。
小写字母尖 s -> 两个字母:SS
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 )
看起来Characeter.toUpperCase()
忽略了这些规则,以便您可以使用它来实现所需的转换:
字符串大小写映射方法比字符大小写映射方法有几个优点。 字符串大小写映射方法可以执行区域设置敏感映射、上下文敏感映射和 1:M 字符映射,而字符大小写映射方法不能。
这将解决这个问题
char[] chars = "ßdenrä".toCharArray();
for (int i = 0; i < chars.length; i++) {
chars[i] = Character.toUpperCase(chars[i]);
}
String output = new String(chars);
System.out.println(output);
结果:ßDENRÄ
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.