String.toUpperCase: примеры (JAVA)

Примеры работы метода toUpperCase в Java
Раздел: Строки (String) - преобразование
String.toUpperCase: String

Описание метода toUpperCase

Метод String.toUpperCase в Java выполняет преобразование всех символов строки в верхний регистр с учётом правил Unicode и локали. Доступны две перегрузки: без аргументов и с объектом java.util.Locale. Метод возвращает новую строку с результатом; исходная строка остаётся неизменной.

Сигнатуры:

  • public String toUpperCase() - использует локаль по умолчанию (Locale.getDefault()).
  • public String toUpperCase(Locale locale) - явное указание локали для корректного преобразования символов, чувствительных к языку.

Аргументы:

  • locale - объект Locale. Если передать null, будет выброшено NullPointerException.

Возвращаемое значение:

  • Новая строка (String) с символами в верхнем регистре. В некоторых реализациях JVM, если преобразование не меняет строку, может быть возвращён тот же объект, но это не гарантируется и не должно использоваться как опора в логике.
  • Преобразования выполняются в соответствии с таблицами Unicode, которые зависят от версии JDK и обновляются между релизами.

Поведение и особенности:

  • Преобразования зависят от локали. Для некоторых языков (например, турецкого) существует специальная логика для букв I/i.
  • Некоторые символы при приведении к верхнему регистру изменяют количество кодовых точек (например, немецкая буква ß может преобразовываться в "SS" в старых реализациях Unicode или в "ẞ" в новых).
  • Метод учитывает суррогатные пары и расширенный набор символов Unicode, но конкретные результаты зависят от версии Unicode в JDK.

Короткие примеры использования

Простой пример

String s = "Hello World";
String r = s.toUpperCase();
System.out.println(r);
HELLO WORLD

С локалью по умолчанию и с явной локалью

String s = "i";
String a = s.toUpperCase(Locale.ENGLISH);
String b = s.toUpperCase(new Locale("tr"));
System.out.println(a);
System.out.println(b);
I
İ

Пример с немецкой буквой ß

String s = "straße";
System.out.println(s.toUpperCase(Locale.GERMAN));
STRASSE

Пример с греческим сигма

String s = "σς"; // маленькое sigma и финальное sigma
System.out.println(s.toUpperCase(Locale.forLanguageTag("el")));
ΣΣ

Похожие методы в Java

  • String.toLowerCase() - обратная операция: преобразует символы в нижний регистр; также есть перегрузка с Locale. Предпочтительнее при необходимости приведения к нижнему регистру.
  • Character.toUpperCase(int codePoint) и Character.toUpperCase(char ch) - подходят для обработки отдельных символов или при обходе строки с учётом суррогатных пар. Применяются при по-символьной трансформации и для оптимизации при потоковой обработке.
  • java.text.Collator - не преобразует регистр, но полезен для сравнения строк с учётом локали и правил сортировки; применяется при упорядочивании, где регистр не должен исказить результат.

Аналоги в других языках и их отличия

JavaScript

// toUpperCase без локали
console.log('i'.toUpperCase());
// ECMAScript не поддерживает передачу локали в стандартном методе
I

Отличие: в JavaScript нет стандартной версии метода с локалью; поведение зависит от реализаций и Unicode в среде выполнения.

Python

s = 'i'
print(s.upper())
# Для учёта специфики локали можно использовать модуль locale, но метод str.upper() использует Unicode-таблицы
I

Отличие: Python использует Unicode-таблицы для преобразования; локаль обычно не влияет на str.upper().

PHP

echo strtoupper('i');
// Для многобайтных данных рекомендуется mb_strtoupper
echo mb_strtoupper('i', 'UTF-8');
I
I

Отличие: для корректной работы с Unicode предпочтительна mb_* версия.

C# (.NET)

string s = "i";
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.ToUpper(new CultureInfo("tr-TR")));
I
İ

Сходно с Java: есть перегрузки с культурой (culture) и чувствительность к локали.

Go (Golang)

import ("fmt"; "strings")
fmt.Println(strings.ToUpper("i"))
I

Отличие: в стандартной библиотеке нет прямой поддержки локалей при преобразовании регистра.

Kotlin

val s = "i"
println(s.uppercase())
println(s.uppercase(Locale.forLanguageTag("tr")))
I
İ

Kotlin вызывает реализацию платформы Java при запуске на JVM и сохраняет поведение локалей.

Lua и SQL

Lua: string.upper - простая реализация без полного Unicode/локали. SQL: функции зависят от СУБД, многие СУБД применяют правила локали сервера при преобразованиях.

Типичные ошибки и примеры

NullPointerException при вызове на null

String s = null;
System.out.println(s.toUpperCase());
Exception in thread "main" java.lang.NullPointerException
    at ...

NullPointerException при передаче null в перегрузку с Locale

String s = "test";
System.out.println(s.toUpperCase(null));
Exception in thread "main" java.lang.NullPointerException
    at java.base/java.util.Locale.getDefault(Locale.java:...)
    at java.base/java.lang.String.toUpperCase(String.java:...)

Ожидание одинакового поведения на всех локалях

String s = "i";
System.out.println(s.toUpperCase(Locale.ENGLISH));
System.out.println(s.toUpperCase(new Locale("tr")));
I
İ

Описание: неверные ожидания могут привести к багам при сравнении строк или обработке имён файлов в разных локалях.

Неправильная зависимость от длины строки после преобразования

String s = "straße";
String r = s.toUpperCase(Locale.GERMAN);
System.out.println(s.length() + " -> " + r.length());
6 -> 6 (или 5 -> 6 в зависимости от версии JDK)

Описание: некоторые символы расширяются в несколько кодовых точек, что влияет на длину и индексы.

Изменения поведения в новых версиях

Поведение метода напрямую зависит от версии Unicode, которая встроена в конкретный релиз JDK. С течением времени обновлялись таблицы соответствий регистров, что могло изменить результаты для отдельных символов (например, обработка немецкой ß или новых заглавных символов). Рекомендация: при критичных преобразованиях учитывать версию JDK и при необходимости использовать Locale.ROOT для стабильно-предсказуемой трансформации без влияния пользовательских региональных настроек.

Расширенные и редкие варианты применения

Пакетная обработка списка строк с учётом локали

Пример java
List names = List.of("pålle", "i", "straße");
List upper = names.stream()
    .map(s -> s.toUpperCase(Locale.forLanguageTag("sv")))
    .collect(Collectors.toList());
upper.forEach(System.out::println);
PÄLLE
I
STRASSE

Использование Locale.ROOT для языко-независимых операций

Пример java
String file = "i";
// для хранения ключей или сравнения в коде, где важна консистентность
String key = file.toUpperCase(Locale.ROOT);
System.out.println(key);
I

Описание: Locale.ROOT обеспечивает предсказуемость при кросс-платформенной логике.

По-символьная обработка с учётом суррогатных пар

Пример java
String s = "a𝔊"; // латинская a + математическая заглавная A (символ вне BMP)
StringBuilder sb = new StringBuilder();
int i = 0;
while (i < s.length()) {
    int cp = s.codePointAt(i);
    int up = Character.toUpperCase(cp);
    sb.appendCodePoint(up);
    i += Character.charCount(cp);
}
System.out.println(sb.toString());
A????  (результат зависит от исходного кода точки и её верхнего регистра)

Описание: непосредственное использование кодовых точек даёт контроль при работе с расширенными символами.

Сравнение строк в регистро-независимом виде с учётом локали

Пример java
String a = "straße";
String b = "STRASSE";
boolean eqRoot = a.toUpperCase(Locale.ROOT).equals(b.toUpperCase(Locale.ROOT));
boolean eqGerman = a.toUpperCase(Locale.GERMAN).equals(b.toUpperCase(Locale.GERMAN));
System.out.println(eqRoot + " " + eqGerman);
true true

Описание: в разных локалях и версиях JDK результаты сравнения могут отличаться, поэтому проверка на нужную версию и выбор локали важны.

Оптимизация массовых преобразований

Пример java
// При больших объёмах данных лучше минимизировать создание промежуточных объектов
StringBuilder out = new StringBuilder(input.length());
int i = 0;
while (i < input.length()) {
    int cp = input.codePointAt(i);
    int up = Character.toUpperCase(cp);
    out.appendCodePoint(up);
    i += Character.charCount(cp);
}
String result = out.toString();
(зависит от input)

Описание: ручная обработка кодовых точек может быть эффективнее при необходимости учёта суррогатных пар и минимизации временных объектов.

джава String.toUpperCase function comments

En
String.toUpperCase Converts all of the characters in this String to upper case