Освоение строк в Java: создание, методы и лучшие практики
Строки в Java
В этом уроке мы изучим строки в Java, способы их создания и различные методы класса String с помощью примеров.
В Java строка — это последовательность символов. Например, "hello" — строка, содержащая символы 'h', 'e', 'l', 'l' и 'o'.
Для представления строки в Java используются двойные кавычки. Например,
// создание строки
String type = "Java programming";
Здесь создана строковая переменная type, инициализированная строкой Java Programming.
Пример: Создание строки в Java
class Main {
public static void main(String[] args) {
// создаем строки
String first = "Java";
String second = "Python";
String third = "JavaScript";
// выводим строки
System.out.println(first); // Java
System.out.println(second); // Python
System.out.println(third); // JavaScript
}
}
В примере созданы три строки: first, second, third. Мы создаем строки напрямую, как примитивные типы.
Однако есть и другой способ создания строк (через ключевое слово new). Мы рассмотрим его позже.
Примечание: Строки в Java — не примитивные типы (как int, char и т.д.). Все строки — объекты предопределенного класса String.
И все строковые переменные — экземпляры класса String.
Операции со строками в Java
Класс String предоставляет различные методы для операций над строками. Рассмотрим наиболее часто используемые.
1. Получение длины строки
Для нахождения длины строки используется метод length() класса String. Например,
class Main {
public static void main(String[] args) {
// создаем строку
String greet = "Hello! World";
System.out.println("Строка: " + greet);
// получаем длину greet
int length = greet.length();
System.out.println("Длина: " + length);
}
}
Вывод
Строка: Hello! World Длина: 12
Метод length() вычисляет общее количество символов в строке и возвращает его. Подробнее: Длина строки в Java.
2. Объединение двух строк в Java
Две строки можно объединить с помощью метода concat(). Например,
class Main {
public static void main(String[] args) {
// первая строка
String first = "Java ";
System.out.println("Первая строка: " + first);
// вторая строка
String second = "Programming";
System.out.println("Вторая строка: " + second);
// объединяем две строки
String joinedString = first.concat(second);
System.out.println("Объединенная строка: " + joinedString);
}
}
Вывод
Первая строка: Java Вторая строка: Programming Объединенная строка: Java Programming
Обратите внимание на оператор:
String joinedString = first.concat(second);
Метод concat() присоединяет second к first и присваивает результат joinedString.
Строки также можно объединять оператором + в Java. Подробнее: Конкатенация строк в Java.
3. Сравнение двух строк
В Java для сравнения двух строк используется метод equals(). Например,
class Main {
public static void main(String[] args) {
// создаем 3 строки
String first = "java programming";
String second = "java programming";
String third = "python programming";
// сравниваем первую и вторую
boolean result1 = first.equals(second);
System.out.println("Строки first и second равны: " + result1);
// сравниваем первую и третью
boolean result2 = first.equals(third);
System.out.println("Строки first и third равны: " + result2);
}
}
Вывод
Строки first и second равны: true Строки first и third равны: false
В примере созданы 3 строки: first, second, third. Метод equals() проверяет, равна ли одна строка другой.
Метод equals() сравнивает содержимое строк. Подробнее: Сравнение строк в Java.
Примечание: Строки также можно сравнивать оператором == в Java. Однако этот подход отличается от equals(). Подробнее: Оператор == против equals() для строк в Java.
Экранирование символов в строках Java
Экранирующий символ используется для экранирования некоторых символов внутри строки.
Предположим, нужно включить двойные кавычки внутри строки.
// включить двойные кавычки
String example = "This is the "String" class";
Поскольку строки обозначаются двойными кавычками, компилятор сочтет "This is the " строкой. Приведенный код вызовет ошибку.
Для решения используется экранирующий символ \ в Java. Например,
// использование экранирующего символа
String example = "This is the \"String\" class.";
Теперь экранирующие символы говорят компилятору игнорировать двойные кавычки и прочитать весь текст.
Строки в Java неизменяемы (Immutable)
В Java строки неизменяемы. Это значит: однажды созданную строку нельзя изменить.
Для глубокого понимания рассмотрим пример:
// создаем строку
String example = "Hello! ";
Здесь создана строковая переменная example, содержащая "Hello! ".
Теперь предположим, мы хотим изменить строку.
// добавить другую строку "World"
// к предыдущей строке example
example = example.concat(" World");
Кажется, мы изменили значение предыдущей строки. Однако это неверно.
Посмотрим, что произошло:
- JVM берет первую строку "Hello! "
- создает новую строку, добавляя "World" к первой
- присваивает новую строку "Hello! World" переменной example
- первая строка "Hello! " остается неизменной
Создание строк с ключевым словом new
До сих пор мы создавали строки как примитивные типы.
Поскольку строки в Java — объекты, их можно создавать через new. Например,
// создание строки через new
String name = new String("Java String");
В примере создана строка name с помощью new.
При создании объекта строки вызывается конструктор String(). Подробнее о конструкторах: Конструкторы в Java.
Примечание: Класс String предоставляет различные конструкторы для создания строк. Подробнее: Java String (официальная документация Java).
Пример: Создание строк Java через new
class Main {
public static void main(String[] args) {
// создание строки через new
String name = new String("Java String");
System.out.println(name); // Java String
}
}
Строковые литералы против new
Теперь, когда мы знаем оба способа создания строк, посмотрим на главное различие.
В Java JVM поддерживает пул строк (string pool) для хранения всех строк в памяти. Пул строк помогает переиспользовать строки.
1. При создании строк через строковые литералы,
String example = "Java";
Мы напрямую задаем значение строки (Java). Компилятор сначала проверяет пул строк: существует ли уже такая строка.
- Если строка уже существует, новая строка не создается. Вместо этого новая ссылка example указывает на уже существующую строку (
Java). - Если строки нет, создается новая строка (
Java).
2. При создании строк через ключевое слово new,
String example = new String("Java");
Значение строки не задается напрямую. Поэтому новая строка "Java" создается даже если "Java" уже есть в пуле строк.
Методы класса String в Java
Помимо упомянутых, в Java существует множество методов строк. Вот некоторые из них:
| Метод | Описание |
|---|---|
| contains() | проверяет, содержит ли строка подстроку |
| substring() | возвращает подстроку строки |
| join() | объединяет заданные строки с разделителем |
| replace() | заменяет указанный старый символ на новый |
| replaceAll() | заменяет все подстроки, соответствующие regex |
| replaceFirst() | заменяет первое совпадение подстроки |
| charAt() | возвращает символ в указанной позиции |
| getBytes() | преобразует строку в массив байтов |
| indexOf() | возвращает позицию указанного символа |
| compareTo() | сравнивает две строки в лексикографическом порядке |
| compareToIgnoreCase() | сравнивает строки, игнорируя регистр |
| trim() | удаляет начальные и конечные пробелы |
| format() | возвращает отформатированную строку |
| split() | разбивает строку на массив строк |
| toLowerCase() | преобразует строку в нижний регистр |
| toUpperCase() | преобразует строку в верхний регистр |
| valueOf() | возвращает строковое представление аргумента |
| toCharArray() | преобразует строку в массив char |
| matches() | проверяет, соответствует ли строка заданному regex |
| startsWith() | проверяет, начинается ли строка с заданной подстроки |
| endsWith() | проверяет, заканчивается ли строка заданной подстрокой |
| isEmpty() | проверяет, пуста ли строка |
| intern() | возвращает каноническое представление строки |
| contentEquals() | проверяет, равна ли строка charSequence |
| hashCode() | возвращает хеш-код строки |
| subSequence() | возвращает подпоследовательность из строки |
java
- Строки в C#: основы, операции и продвинутые техники
- Освоение операторов Java: типы, синтаксис и практические примеры
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Строковые представления в Java Enums: настройка toString() и лучшие практики
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Понимание String.charAt() в Java: синтаксис, возвращаемый тип, исключения и пример
- Освоение String.endsWith() в Java: проверка суффиксов строки с примерами
- Замена строк в Java: replace(), replaceAll() и replaceFirst() подробно
- Java String toLowerCase() и toUpperCase(): преобразование регистра с учётом локали