Converting Greek to Uppercase in Java

不问归期 提交于 2019-12-06 01:59:38

问题


What I'm trying to do is fairly simple:

String example = "Τάχιστη αλώπηξ βαφής ψημένη γη - Mary Had A Little Lamb";
String upper = example.toUpperCase();

In Greek, only the first letter of an uppercase word should contain accented characters.

// upper contains the following (incorrect) string:
// ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ - MARY HAD A LITTLE LAMB

// correct string:
// ΤΑΧΙΣΤΗ ΑΛΩΠΗΞ ΒΑΦΗΣ ΨΗΜΕΝΗ ΓΗ - MARY HAD A LITTLE LAMB 

(The accents are hard to see, but they're there.)

According to the Java 1.7 documentation, I should be able to pass a locale to toUpperCase, like so:

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

However, it looks like there are no specific rules for toUpperCase which handle Greek correctly.

Is it possible to define the behavior of toUpperCase for a particular locale, so that I can ensure I get the correct result?

Alternatively, I can just write a utility class to handle this particular case. But if it's possible, I'd prefer to override this function per locale, in case this comes up for other languages.


回答1:


i tried the following and seemed to work:

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(""));



回答2:


Per @ajb, this is not supported in Java by default. I had to create my own solution.



来源:https://stackoverflow.com/questions/24621265/converting-greek-to-uppercase-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!