Единственный двухсимвольный орграф, в котором оба символа пишутся с заглавной буквы одновременно и которые вы, вероятно, встретите в реальной программе, - это голландский IJ. Просто справьтесь, если локаль голландская. В худшем маловероятном сценарии, вам нужно будет добавить 1-2 случая позже, это не означает, что вы будете сталкиваться с новым орграфом с заглавными буквами каждый день, поэтому здесь не стоит фокусироваться на обобщении.
Обратите внимание, что в общем случае невозможно использовать преобразование символов в символы, чтобы получить заголовок или верхний регистр для произвольного языка. Некоторые символы нижнего регистра переводят в более чем один символ верхнего регистра. Таким образом, вы должны использовать String в общем случае.
Но нет никаких проблем с локалью в названии. Вероятно, существует небольшое недоразумение о том, как работает метод toTitleCase (). Он преобразует в регистр заголовков любой символ, включая тот, который уже в верхнем регистре.
Например, рассмотрим символ dž . Форма в верхнем регистре - DŽ , а в форме заголовка - Dž :
System.out.println(Character.toUpperCase('\u01C4'));
DŽ
и
System.out.println(Character.toTitleCase('\u01C4'));
Dž
однако, следующее также даст название case
System.out.println(Character.toTitleCase(Character.toUpperCase('\u01C4')));
Dž
Таким образом, если вы преобразуете язык в верхний регистр перед регистром заглавия, вы получите правильный код, и при этом не будет проблем с использованием прецедента заглавия в результате, включая турецкий и т. Д.
System.out.println(Character.toTitleCase("dž".toUpperCase().charAt(0)));
System.out.println(Character.toTitleCase("i".toUpperCase(Locale.forLanguageTag("tr")).charAt(0)));
Dž
İ
Обратите внимание, что использование только регистра заглавия одного символа, если есть разница с его верхним регистром, неверно в общем случае.
Подведем итог:
- Обработка голландского орграфа (или других орграфов, если вы столкнетесь с ними, я очень сомневаюсь, что в худшем случае это будет 1-2 случая для времени жизни программы).
- Преобразовать необходимые символы в виде строки, используя locale и toUpperCase ()
- Преобразование всех символов результата toUpperCase с использованием Character toTitleCase.
Обратите внимание, что все еще есть некоторые случаи с заглавными буквами, которые учитывают контекст, такие как ирландский префикс, английские имена ff и т. Д., Которые требуют больше, чем просто обработка символов / строк, но я сомневаюсь, что вам нужно обрабатывать их для генерации заголовка в программа.