Строки
Строка – это текст: слово, фраза, предложение, любое сообщение, состоящее из символов.
В Java для работы с текстом используется тип String.
Строки удобно использовать для имён, названий, сообщений, вводимых пользователем.
Основное
Строковая переменная объявляется так:
Примеры:
Важно:
- строка записывается в двойных кавычках:
"Java"; - тип
Stringпишется с большой буквы; - строка может быть и пустой (
"").
Создание строк
Основной способ – строковый литерал:
Можно собирать строку из чисел и других значений:
int age = 12;
double score = 4.5;
String info = "Возраст: " + age + ", балл: " + score;
// "Возраст: 12, балл: 4.5"
Есть и другие способы (через String.valueOf, конструкторы и т.п.), но в большинстве задач хватает литералов и конкатенации.
Длина строки и доступ к символам
У строки есть длина – количество символов.
Нумерация символов начинается с 0.
String s = "Java";
int n = s.length(); // 4
char c0 = s.charAt(0); // 'J'
char c1 = s.charAt(1); // 'a'
Полезно помнить:
- последний символ имеет индекс
length() - 1; - если обратиться к несуществующему индексу, будет ошибка выполнения.
Конкатенация (склейка) строк
Строки можно склеивать оператором +.
Числа и другие типы при этом автоматически превращаются в текст.
String firstName = "Иван";
String lastName = "Петров";
String fullName = firstName + " " + lastName;
// "Иван Петров"
С числами:
Сравнение строк
Строки нельзя сравнивать по содержимому через ==.
Для сравнения текста используются методы equals и equalsIgnoreCase.
String s1 = "hello";
String s2 = "hello";
String s3 = "Hello";
boolean a = s1.equals(s2); // true
boolean b = s1.equals(s3); // false
boolean c = s1.equalsIgnoreCase(s3); // true
== проверяет, совпадают ли ссылки (адреса), а не текст.
Для задач с текстом по содержимому всегда используем equals.
Подстроки и поиск
Часть строки можно получить методом substring:
Индексы считаются с 0, правый предел (endIndex) не входит.
Поиск подстроки:
String s = "abracadabra";
int p1 = s.indexOf("bra"); // 1
int p2 = s.indexOf("cad"); // 4
int p3 = s.indexOf("xyz"); // -1 (нет вхождения)
Разбиение строки
Метод split разбивает строку на части по разделителю и возвращает массив строк.
Частый случай – разделение по пробелу или запятой.
Чтение строк с клавиатуры
Через Scanner строки читают так:
Scanner in = new Scanner(System.in);
String word = in.next(); // одно слово (до пробела)
String line = in.nextLine(); // вся строка целиком
Если перед nextLine() уже читали числа (nextInt, nextDouble и т.п.), между ними часто нужна «промывка» строки:
int n = in.nextInt();
in.nextLine(); // читаем остаток строки
String text = in.nextLine(); // теперь читаем настоящую строку
Типичные шаблоны
Подсчёт длины строки
Проверка префикса и суффикса
String s = in.nextLine();
if (s.startsWith("java")) {
System.out.println("начинается с java");
}
if (s.endsWith(".txt")) {
System.out.println("это текстовый файл");
}
Сравнение строк без учёта регистра
String answer = in.nextLine();
if (answer.equalsIgnoreCase("yes")) {
System.out.println("ДА");
} else {
System.out.println("НЕТ");
}
Что нужно запомнить
Строки в Java хранятся в типе String и записываются в двойных кавычках:
Длину строки даёт метод length(), отдельный символ – charAt(i).
Для сравнения строк по содержимому используется equals / equalsIgnoreCase, а не оператор ==.
Строки удобно склеивать оператором +, при этом числа автоматически превращаются в текст.
В C++ для текста чаще всего используют std::string.
#include <iostream>
#include <string>
int main() {
std::string name = "Иван";
std::string city = "Казань";
std::string message = "Привет, мир!";
std::cout << message << "\n";
return 0;
}
std::string хранит последовательность символов. Длину можно узнать через size() (или length()), символ по индексу – через s[i].
Строки можно склеивать через + и +=:
Сравнение по содержимому работает через ==:
Подстрока и поиск:
std::string s = "abracadabra";
std::string t = s.substr(3, 4); // "acad"
std::size_t p = s.find("cad");
// если не найдено, p == std::string::npos
Чтение строки целиком обычно делают через std::getline:
В Python строки имеют тип str.
Длина строки – len(s), символ по индексу – s[i]. Индексация начинается с 0.
Склейка строк – +, а для удобного формата часто используют f-строки:
Сравнение по содержимому делается через ==:
Подстроки обычно берут срезом, а поиск делают через find:
Разбиение строки по пробелам:
Тип строки
Java: String
C++: std::string
Python: str
Сравнение по тексту
Java: s1.equals(s2) (без учёта регистра: equalsIgnoreCase)
C++: a == b
Python: a == b
Длина строки
Java: s.length()
C++: s.size() (или s.length())
Python: len(s)
Символ по индексу
Java: s.charAt(i) возвращает char
C++: s[i] возвращает char
Python: s[i] возвращает строку длины 1
Подстрока
Java: s.substring(l, r) – правая граница r не входит
C++: s.substr(l, len) – второй параметр это длина
Python: s[l:r] – правая граница r не входит
Склейка строк
Java: оператор +. Если склеек много, обычно используют StringBuilder.
C++: + и +=.
Python: +. Если склеек много, обычно собирают части и соединяют через ''.join(parts).
Чтение строки целиком
Java: Scanner.nextLine()
C++: getline(cin, line)
Python: input()