String: строки
Что такое строки в Dart?
В языке программирования Dart строки (String
) представляют собой последовательность символов в кодировке UTF-16. Они неизменяемы (immutable), что означает, что любые операции над строками создают новые строки, а не изменяют существующие.
void main() {
String message = 'Привет, мир!';
print(message);
}
Создание строк
Строки в Dart можно создавать с помощью одинарных ('
) или двойных ("
) кавычек:
void main() {
String singleQuotes = 'Одинарные кавычки';
String doubleQuotes = "Двойные кавычки";
print(singleQuotes);
print(doubleQuotes);
}
Для создания многострочных строк используются тройные кавычки:
void main() {
String multiLine = '''Это
многострочная
строка''';
print(multiLine);
}
Конкатенация строк
Конкатенация строк — это процесс объединения двух или более строк в одну. В Dart для этого используется оператор +
.
void main() {
String part1 = 'Dart ';
String part2 = '— отличный язык!';
String result = part1 + part2;
print(result); // Dart — отличный язык!
}
Этот метод прост и интуитивно понятен, но имеет несколько недостатков:
- При использовании большого количества строк код может стать громоздким.
- Избыточное использование + снижает читаемость кода.
- Может повлиять на производительность, если объединение строк выполняется в цикле.
Чтобы сделать код более лаконичным и эффективным, предпочтительнее использовать интерполяцию строк.
Интерполяция строк
Интерполяция — это встроенный механизм Dart, который позволяет вставлять переменные и выражения внутрь строк, используя символ $ (или ${} для выражений).
void main() {
String name = 'Andrej';
print('Привет, $name!'); // Привет, Andrej!
print('2 + 2 = ${2 + 2}'); // 2 + 2 = 4
}
Преимущества интерполяции перед конкатенацией:
- Улучшает читаемость кода.
- Избавляет от необходимости использовать +, что сокращает вероятность ошибок.
- Оптимизирована для работы с динамическими значениями и выражениями.
Таким образом, если вам нужно объединять строки, особенно с переменными или выражениями, интерполяция — лучший выбор.
Методы работы со строками
Dart предоставляет множество полезных методов для работы со строками:
void main() {
String text = 'Dart — мощный язык';
print(text.length); // Длина строки
print(text.toUpperCase()); // В верхний регистр
print(text.toLowerCase()); // В нижний регистр
print(text.contains('мощный')); // Проверка вхождения
print(text.replaceAll('мощный', 'гибкий')); // Замена подстроки
print(text.substring(2, 6)); // Извлечение подстроки
}
Вот более подробный пример для substring, объясняющий его работу:
void main() {
String text = 'Программирование на Dart';
// Извлекаем подстроку с 0 до 12 символа (не включая 12)
String part1 = text.substring(0, 12);
print(part1); // Выведет: Программирова
// Извлекаем подстроку с 15 символа до конца строки
String part2 = text.substring(15);
print(part2); // Выведет: на Dart
// Подстрока с отрицательными индексами не работает (вызовет ошибку)
// String error = text.substring(-3, 5); // Ошибка!
}
Этот пример показывает, как можно получать части строки разными способами:
- Если указан только один индекс (text.substring(15)), подстрока берётся с этого места и до конца.
- Второй параметр указывает, до какого символа извлекается подстрока (не включая его).
Экранирование спецсимволов
В Dart можно использовать экранирование с помощью \
:
void main() {
String text = 'Это строка с \"кавычками\"';
print(text);
}
Однако если строка объявлена с помощью одинарных или двойных кавычек, экранирование не требуется.
Домашнее задание по программированию на строках в Dart
1. Приветствие по имени
Задача: Дана строка name
, например, "Bob". Вернуть приветствие в формате "Hello Bob!".
Примеры:
helloName("Bob") → "Hello Bob!"
helloName("Alice") → "Hello Alice!"
helloName("X") → "Hello X!"
2. Вставка слова в шаблон
Задача: Дана строка out
длиной 4 (например, "<<>>") и слово. Вернуть новую строку, где слово находится внутри out
.
Примеры:
makeOutWord("<<>>", "Yay") → "<<Yay>>"
makeOutWord("<<>>", "WooHoo") → "<<WooHoo>>"
makeOutWord("[[]]", "word") → "[[word]]"
3. Первая половина строки
Задача: Дана строка четной длины. Вернуть её первую половину.
Примеры:
firstHalf("WooHoo") → "Woo"
firstHalf("HelloThere") → "Hello"
firstHalf("abcdef") → "abc"
4. Конкатенация строк без первого символа
Задача: Даны две строки. Вернуть их конкатенацию, исключая первые символы обеих строк.
Примеры:
nonStart("Hello", "There") → "ellohere"
nonStart("java", "code") → "avaode"
nonStart("shotl", "java") → "hotlava"
5. Первый или последний символ строки
Задача: Дана строка и булево значение front
. Вернуть первый символ строки, если front=True
, иначе последний.
Примеры:
theEnd("Hello", true) → "H"
theEnd("Hello", false) → "o"
theEnd("oh", true) → "o"
6. Средние три символа
Задача: Дана строка нечетной длины. Вернуть подстроку длиной 3 из её центра.
Примеры:
middleThree("Candy") → "and"
middleThree("and") → "and"
middleThree("solving") → "lvi"
7. Первый и последний символы строк
Задача: Даны две строки a
и b
. Вернуть строку, состоящую из первого символа a
и последнего символа b
. Если строка пустая, использовать @
вместо пропущенного символа.
Примеры:
lastChars("last", "chars") → "ls"
lastChars("yo", "java") → "ya"
lastChars("hi", "") → "h@"
8. Проверка на цвет
Задача: Если строка начинается с "red" или "blue", вернуть этот цвет. В противном случае вернуть пустую строку.
Примеры:
seeColor("redxx") → "red"
seeColor("xxred") → ""
seeColor("blueTimes") → "blue"
9. Тройное повторение первых двух символов
Задача: Дана строка. Вернуть новую строку, состоящую из трёх повторений первых двух символов исходной строки. Если строка короче двух символов, повторять всю строку.
Примеры:
extraFront("Hello") → "HeHeHe"
extraFront("ab") → "ababab"
extraFront("H") → "HHH"
Дополнительные ссылки
- String class - все методы отсюда надо знать.
- Юникод
- ASCII
- UTF-8
- КОИ-8
- Строковый тип