Skip to content

String: строки

Что такое строки в Dart?

В языке программирования Dart строки (String) представляют собой последовательность символов в кодировке UTF-16. Они неизменяемы (immutable), что означает, что любые операции над строками создают новые строки, а не изменяют существующие.

void main() {
  String message = 'Привет, мир!';
  print(message);
}

hello

Создание строк

Строки в 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);
}

Однако если строка объявлена с помощью одинарных или двойных кавычек, экранирование не требуется.

string replace

Домашнее задание по программированию на строках в 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"

Дополнительные ссылки

  1. String class - все методы отсюда надо знать.
  2. Юникод
  3. ASCII
  4. UTF-8
  5. КОИ-8
  6. Строковый тип
14 февр. 2025 г.
andron13