问题
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