我想做的事情很简单:
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
的行为,以便我可以确保获得正确的结果?
或者,我可以编写一个实用程序类来处理这种特殊情况。但如果可能的话,我宁愿在每个语言环境中覆盖此函数,以防其他语言出现。
答案 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。我必须创建自己的解决方案。