String
String — класс для работы с текстом (строками символов).
- Строковый литерал пишется в кавычках:
"Hello","abc123". - Переменная типа
Stringссылается на объект-строку. - Строки неизменяемы: методы не меняют исходную строку, а возвращают новую.
Создание строк
Основные способы
String s1 = "Hello"; // строковый литерал — основной способ
String s2 = ""; // пустая строка
String s3 = String.valueOf(10); // из числа -> "10"
Конструкция new String("Hello") в обычном коде не нужна.
Длина и доступ к символам
Основные методы
| Сигнатура | Описание |
|---|---|
int length() |
Длина строки (количество символов). |
char charAt(int i) |
Символ по индексу i (от 0 до length() - 1). |
Пример:
Сравнение строк
Строки нельзя сравнивать через ==, для содержимого используются методы equals и equalsIgnoreCase.
Основные методы
| Сигнатура | Описание |
|---|---|
boolean equals(String other) |
Истина, если строки одинаковы посимвольно. |
boolean equalsIgnoreCase(String other) |
То же, но без учёта регистра. |
Примеры:
String a = "Hello";
String b = "Hello";
String c = "hello";
boolean x = a.equals(b); // true
boolean y = a.equals(c); // false
boolean z = a.equalsIgnoreCase(c); // true
Конкатенация (склейка) строк
Строки можно соединять оператором +. При этом другие типы автоматически превращаются в текст.
Можно использовать и явное преобразование:
Подстроки
Основные методы
| Сигнатура | Описание |
|---|---|
String substring(int beginIndex) |
Подстрока от beginIndex до конца строки. |
String substring(int beginIndex, int endIndex) |
Подстрока от beginIndex до endIndex - 1. |
Индексы считаются от 0. endIndex не входит в подстроку.
Примеры:
Поиск в строке
Основные методы
| Сигнатура | Описание |
|---|---|
int indexOf(String str) |
Индекс первого вхождения str, либо -1, если нет. |
int indexOf(char ch) |
Индекс первого вхождения символа ch, либо -1. |
boolean contains(CharSequence s) |
Содержит ли строка подстроку s. |
boolean startsWith(String prefix) |
Начинается ли строка с prefix. |
boolean endsWith(String suffix) |
Заканчивается ли строка на suffix. |
Примеры:
String s = "abracadabra";
int p = s.indexOf("bra"); // 1
int q = s.indexOf('a'); // 0
boolean c1 = s.contains("cad"); // true
boolean c2 = s.startsWith("ab"); // true
boolean c3 = s.endsWith("bra"); // true
Изменение регистра и обрезка пробелов
Эти методы возвращают новые строки, исходная строка не меняется.
Основные методы
| Сигнатура | Описание |
|---|---|
String toLowerCase() |
Копия строки в нижнем регистре. |
String toUpperCase() |
Копия строки в верхнем регистре. |
String trim() |
Копия строки без пробелов по краям. |
Примеры:
String s = " Hello ";
String t1 = s.trim(); // "Hello"
String t2 = t1.toLowerCase(); // "hello"
String t3 = t1.toUpperCase(); // "HELLO"
Разбиение строки
Метод split разбивает строку на части по разделителю и возвращает массив строк.
| Сигнатура | Описание |
|---|---|
String[] split(String regex) |
Делит строку по разделителю regex. |
Пример с простым разделителем (пробел):
Для более сложных шаблонов regex используется регулярное выражение. В базовых задачах часто хватает разделения по пробелу или запятой.
Примеры использования
Подсчёт длины строки
Проверка, что строка начинается с заданного префикса
String s = in.nextLine();
String pref = "java";
if (s.startsWith(pref)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
Сравнение строк без учёта регистра
String s1 = in.nextLine();
String s2 = in.nextLine();
if (s1.equalsIgnoreCase(s2)) {
System.out.println("EQUAL");
} else {
System.out.println("DIFFERENT");
}
Полный API
Полный список методов и деталей реализации см. в официальной документации Java для класса java.lang.String (Java SE 11).