Почему Символ Java.toUpperCase/toLowerCase не имеет параметра Locale, такого как String.метод touppercase/столоверчения

мне интересно, почему Character.toUpperCase/toLowerCase не имеет параметра Locale, например String.toUpperCase/toLowerCase.

Я должен сначала заглавный текст, который может быть на любом языке. У меня есть 2 решения:

  1. использовать Character.toUpperCase

    String text = "stack overflow";
    StringBuilder sb = new StringBuilder(text);   
    
    sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); // No Locale parameter here.
    
    String out = sb.toString(); //Out: Stack overflow
    
  2. использовать String.toUpperCase

    Locale myLocale = new Locale(locateId);
    
    String text = "stack overflow";
    String text1 = text.substring(0,1).toUpperCase(myLocale );
    String text2 = text.substring(1);
    
    String out = text1 + text2; // Out: Stack overflow
    

для моего языка. Оба пути имеют одинаковый результат.

мой вопрос есть:

  • поскольку текст может быть на любом языке. Какой путь мне следует использовать?

  • почему Character.toUpperCase/toLowerCase не имеет параметра Locale, потому что между Character.toUpperCase/toLowerCase и String.toUpperCase/toLowerCase потому что строка-это массив символов.

3 ответов


С Character#toUpperCase(int) Javadoc,

в общем, String.toUpperCase() следует использовать для сопоставления символов в верхнем регистре. String методы отображения случая имеют несколько преимуществ над Character методы отображения случая. String методы сопоставления регистров могут выполнять сопоставления с учетом локали, контекстно-зависимые сопоставления и сопоставления символов 1:M, тогда как Character методы сопоставления case не могут.

Итак, ответ ваш второй пример (String.toUpperCase)


Как говорит Javadoc:

В общем, строка.toUpperCase () следует использовать для сопоставления символов в верхнем регистре. Методы сопоставления строковых регистров имеют несколько преимуществ перед методами сопоставления символьных регистров. Методы сопоставления строковых регистров могут выполнять сопоставления с учетом локали, контекста и символов 1:M, тогда как методы сопоставления символьных регистров не могут.

поэтому используйте String.toUppercase ()


Если вопрос "какой метод я должен использовать", то этот вопрос является дубликатом преобразование строки в регистр заголовка и правильный ответ либо

Если вопрос "почему не Character имейте методы изменения регистра с учетом локали", тогда единственный способ получить ответ - проконсультироваться с одним из дизайнеров языка Java. Маловероятно, что сообщество переполнения стека сможет дать вам ответ, который вы хотите.