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.
解决方案
Per @ajb, this is not supported in Java by default. I had to create my own solution.