我想要做的事情非常简单:
String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb";
String upper = example.toUpperCase();
在希腊语中,只有大写单词的第一个字母应该包含重音符号。
// upper contains the following (incorrect) string:
// ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ - MARY HAD A LITTLE LAMB
// correct string:
// ΤΑΧΙΣΤΗ ΑΛΩΠΗΞ ΒΑΦΗΣ ΨΗΜΕΝΗ ΓΗ - MARY HAD A LITTLE LAMB
(重音符号很难看到,但它们确实存在。)
根据Java 1.7文档,我应该能够将区域设置传递给
toUpperCase
,如下所示:String upper = example.toUpperCase(new java.util.Locale("el"));
然而,似乎没有特定的规则适用于正确处理希腊语的 toUpperCase
。
是否可以定义 toUpperCase
在特定区域设置下的行为,以确保我获得正确的结果?
或者,我可以编写一个实用程序类来处理这种特殊情况。但是如果可能的话,我更喜欢按地区覆盖此函数,以防其他语言出现此问题。
toUpperCase
的源代码,似乎它只是单独地翻译每个字符,而不考虑文本的其他部分,除了三种情况:土耳其语,阿塞拜疆语和立陶宛语。这些都是硬编码到代码中的。因此,您可能需要自己编写代码。(另外,也许您应该将此作为错误报告提交给Oracle。) - ajbboolean localeDependent = (lang == "tr" || lang == "az" || lang == "lt");
,他们正在使用“==”比较字符串。哎呀呀。 - ajbtext-transform
规范,该规范规定:在希腊语(el)中,除了闪烁 eta(ή/Ή)外,元音字母在整个单词都是大写字母(ά/Α)时失去了它们的重音。此外,具有第一个元音字母重音的双元音字母会失去重音,并在第二个元音字母上获得分音符(άι/ΑΪ)。参见: 希腊语中表示重音的重音符号和其他变音符号 - Glen Balliet