Класс String в Java предназначен для работы со строками в Java. Все строковые литералы, определенные в Java программе (например, "abc") — это экземпляры класса String. Давай посмотрим на его ключевые характеристики:
- Класс реализует интерфейсы
Serializable
иCharSequence
. Поскольку он входит в пакетjava.lang
, его не нужно импортировать. - Класс String в Java — это final класс, который не может иметь потомков.
- Класс String — immutable класс, то есть его объекты не могут быть изменены после создания. Любые операции над объектом String, результатом которых должен быть объект класса String, приведут к созданию нового объекта.
- Благодаря своей неизменности, объекты класса String являются потокобезопасными и могут быть использованы в многопоточной среде.
- Каждый объект в Java может быть преобразован в строку через метод
toString
, унаследованный всеми Java-классами от классаObject
.
Работа с Java String
Это один из самых часто используемых классов в Java. В нем есть методы для анализа определенных символов строки, для сравнения и поиска строк, извлечения подстрок, создания копии строки с переводом всех символов в нижний и верхний регистр и прочие. Список всех методов класса String можно изучить в официальной документации. Также в Java реализован несложный механизм конкатенации (соединения строк), преобразования примитивов в строку и наоборот. Давай рассмотрим некоторые примеры работы с классом String в Java.Создание строк
Проще всего создать экземпляр класса String, присвоив ему значение строкового литерала:
String s = "I love movies";
Однако у класса String есть много конструкторов, которые позволяют:
- создать объект, содержащий пустую строку
- создать копию строковой переменной
- создать строку на основе массива символов
- создать строку на основе массива байтов (с учетом кодировок)
- и т.д.
Сложение строк
Сложить две строки в Java довольно просто, воспользовавшись оператором+
. Java позволяет складывать друг с другом и переменные, и строковые литералы:
public static void main(String[] args) {
String day = "День";
String and = "и";
String night = "Ночь";
String dayAndNight = day + " " + and + " " + night;
}
Складывая объекты класса String с объектами других классов, мы приводим последние к строковому виду. Преобразование объектов других классов к строковому представлению выполняется через неявный вызов метода toString
у объекта. Продемонстрируем это на следующем примере:
public class StringExamples {
public static void main(String[] args) {
Human max = new Human("Макс");
String out = "Java объект: " + max;
System.out.println(out);
// Вывод: Java объект: Человек с именем Макс
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return "Человек с именем " + name;
}
}
}
Сравнение строк
Для сравнения строк можно воспользоваться методомequals()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("Test String".equals(x)); // true
}
Когда при сравнении строк нам не важен регистр, нужно использовать метод equalsIgnoreCase()
:
public static void main(String[] args) {
String x = "Test String";
System.out.println("test string".equalsIgnoreCase(x)); // true
}
Перевод объекта/примитива в строку
Для перевода экземпляра любого Java-класса или любого примитивного типа данных к строковому представлению, можно использовать методString.valueOf()
:
public class StringExamples {
public static void main(String[] args) {
String a = String.valueOf(1);
String b = String.valueOf(12.0D);
String c = String.valueOf(123.4F);
String d = String.valueOf(123456L);
String s = String.valueOf(true);
String human = String.valueOf(new Human("Alex"));
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(s);
System.out.println(human);
/*
Вывод:
1
12.0
123.4
123456
true
Человек с именем Alex
*/
}
static class Human {
private String name;
public Human(String name) {
this.name = name;
}
@Override
public String toString() {
return "Человек с именем " + name;
}
}
}
Перевод строки в число
Часто бывает нужно перевести строку в число. У классов оберток примитивных типов есть методы, которые служат как раз для этой цели. Все эти методы начинаются со слова parse. Рассмотрим ниже перевод строки в целочисленное (Integer
) и дробное (Double
) числа:
public static void main(String[] args) {
Integer i = Integer.parseInt("12");
Double d = Double.parseDouble("12.65D");
System.out.println(i); // 12
System.out.println(d); // 12.65
}
Перевод коллекции строк к строковому представлению
Если нужно преобразовать все элементы некоторой коллекции строк к строковому представлению через произвольный разделитель, можно использовать такие методы класса String Java:join(CharSequence delimiter, CharSequence... elements)
join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
delimiter
— разделитель элементов, а elements
— массив строк / экземпляр коллекции строк.
Рассмотрим пример, в котором мы преобразуем список строк в строку, разделяя каждую точкой с запятой:
public static void main(String[] args) {
List<String> people = Arrays.asList(
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodriguez",
"Hubert Farnsworth",
"Hermes Conrad",
"John D. Zoidberg",
"Amy Wong"
);
String peopleString = String.join("; ", people);
System.out.println(peopleString);
/*
Вывод:
Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong
*/
}
Разбиение строки на массив строк
Эту операцию выполняет методsplit(String regex)
В качестве разделителя выступает строковое регулярное выражение regex
.
В примере ниже произведем операцию, обратную той, что мы выполняли в предыдущем примере:
public static void main(String[] args) {
String people = "Philip J. Fry; Turanga Leela; Bender Bending Rodriguez; Hubert Farnsworth; Hermes Conrad; John D. Zoidberg; Amy Wong";
String[] peopleArray = people.split("; ");
for (String human : peopleArray) {
System.out.println(human);
}
/*
Вывод:
Philip J. Fry
Turanga Leela
Bender Bending Rodriguez
Hubert Farnsworth
Hermes Conrad
John D. Zoidberg
Amy Wong
*/
}
Определение позиции элемента в строке
В языке Java String предоставляет набор методов для определения позиции символа/подстроки в строке:indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
lastIndexOf(String str)
lastIndexOf(String str, int fromIndex)
ch
— искомый символ (char
)str
— искомая строкаfromIndex
— позиция с которой нужно искать элемент- методы
indexOf
— возвращают позицию первого найденного элемента - методы
lastIndexOf
— возвращают позицию последнего найденного элемента
A
, K
, Z
, Я
в английском алфавите, но будем иметь ввиду, что индексация символов в строке в Java начинается с нуля:
public static void main(String[] args) {
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println(alphabet.indexOf('A')); // 0
System.out.println(alphabet.indexOf('K')); // 10
System.out.println(alphabet.indexOf('Z')); // 25
System.out.println(alphabet.indexOf('Я')); // -1
}
Извлечение подстроки из строки
Для извлечения подстроки из строки класс String в Java предоставляет методы:substring(int beginIndex)
substring(int beginIndex, int endIndex)
public static void main(String[] args) {
String filePath = "D:\\Movies\\Futurama.mp4";
int lastFileSeparatorIndex = filePath.lastIndexOf('\\');
String fileName = filePath.substring(lastFileSeparatorIndex + 1);
System.out.println(fileName); //9
}
Перевод строки в верхний/нижний регистр:
Класс String предоставляет методы для перевода строки в верхний и нижний регистры:toLowerCase()
toUpperCase()
public static void main(String[] args) {
String fry = "Philip J. Fry";
String lowerCaseFry = fry.toLowerCase();
String upperCaseFry = fry.toUpperCase();
System.out.println(lowerCaseFry); // philip j. fry
System.out.println(upperCaseFry); // PHILIP J. FRY
}
Работа с данным классом Java изучается на начальных уровнях онлайн-курса JavaRush:
- Знакомство со String приводится на 1-ом уровне, 4-ой лекции квеста Java Syntax
- Внутреннее устройство String, метод substring изучаются на 2-ом уровне, 3-ей лекции квеста Java Multithreading
- Поиск, получение, удаление подстроки в String изучаются на 2-ом уровне, 4-ой лекции квеста Java Multithreading
- Метод String.format рассматривается на 2-ом уровне, 6-ой лекции квеста Java Multithreading
Дополнительные источники
Информация о классе String также приводится в других статьях сообщества JavaRush:- Строки в Java — статья раскрывает некоторые основы по работе со строками в Java.
- Java String. Вопросы к собеседованию и ответы на них, ч.1 — в данной статье рассматриваются вопросы к собеседованию по теме
String
, а также даются ответы на вопросы с пояснениями и примерами кода. - Строки в Java (class java.lang.String) — в данной статье приводится более глубокий разбор класса String, а также рассматриваются тонкости работы с этим классом.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ