在Java中将希腊语转换为大写

时间:2014-07-07 22:59:03

标签: java localization internationalization

我想做的事情很简单:

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 documentation,我应该能够将区域设置传递给toUpperCase,如下所示:

String upper = example.toUpperCase(new java.util.Locale("el"));

但是,似乎没有正确处理希腊语的toUpperCase的具体规则。

是否可以为特定区域设置定义toUpperCase的行为,以便我可以确保获得正确的结果?

或者,我可以编写一个实用程序类来处理这种特殊情况。但如果可能的话,我宁愿在每个语言环境中覆盖此函数,以防其他语言出现。

2 个答案:

答案 0 :(得分:0)

我尝试了以下操作,似乎有效:

String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb";
String upper = example.toUpperCase();
String temp = Normalizer.normalize(upper, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
System.out.println(pattern.matcher(temp).replaceAll(""));

答案 1 :(得分:0)

Per @ajb,默认情况下不支持Java。我必须创建自己的解决方案。