Строки и интерполяция

Работа со строками в Julia: интерполяция, склейка, полезные функции и отличия от Python.

Строка в Julia — неизменяемая последовательность символов Unicode, тип String. Отдельный символ имеет тип Char.

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

Строки в Julia заключаются только в двойные кавычки. Одинарные кавычки зарезервированы под одиночный символ Char — это отличие от Python, где кавычки взаимозаменяемы.

s = "Привет"
c = 'A'              # это Char, не строка
println(typeof(s))
println(typeof(c))

Вывод:

String
Char

Интерполяция через $

Вместо форматирования через + или format Julia использует интерполяцию: знак $ вставляет значение переменной или целого выражения прямо в строку. Это удобнее и быстрее конкатенации.

name = "Анна"
age = 30
println("Меня зовут $name, мне $age лет")
println("Через 5 лет будет $(age + 5)")

Вывод:

Меня зовут Анна, мне 30 лет
Через 5 лет будет 35

Для выражений используйте $(...), для простой переменной достаточно $name.

Склейка строк

Сложение + для строк в Julia не работает (ещё одно отличие от Python). Для конкатенации есть оператор * и функция string:

a = "Code"
b = "Chick"
println(a * b)
println(string(a, " ", b, "!"))
println("ха"^3)           # повтор строки

Вывод:

CodeChick
Code Chick!
хахаха

Почему *, а не +? Авторы Julia опираются на математику: конкатенация некоммутативна (порядок важен), а в математике некоммутативную операцию принято обозначать умножением, а не сложением.

Полезные функции

ФункцияНазначение
length(s)число символов
uppercase(s) / lowercase(s)смена регистра
occursin("под", s)есть ли подстрока
replace(s, "a" => "b")замена
split(s, ",")разбить на части
strip(s)убрать пробелы по краям

Многострочные строки

text = """
Первая строка
Вторая строка
"""

Как работает под капотом

Строки Julia хранятся в кодировке UTF-8 и неизменяемы: любая «модификация» создаёт новую строку. Из-за UTF-8 один символ может занимать несколько байтов, поэтому индексация строк в Julia работает по байтовым позициям, а не по символам. Для перебора именно символов используйте цикл for ch in s или функцию eachindex — это безопаснее, чем обращаться по числовому индексу.

Частые ошибки

Две классические ловушки. Первая — попытка склеить строки через + (будет ошибка, нужно *). Вторая — обращение s[2] к строке с не-ASCII символами: из-за UTF-8 второй байт может попасть в середину символа и вызвать ошибку. Перебирайте строки циклом по символам, а не по индексам.

Итоги

  • Строки — только в двойных кавычках; одинарные — для Char.
  • Интерполяция через $name и $(выражение) — основной способ форматирования.
  • Конкатенация — оператором * (не +), повтор — ^.
  • Строки неизменяемы и хранятся в UTF-8; перебирайте их по символам, а не по байтовым индексам.
Проверьте себя
1. Как в Julia склеить две строки a и b?
Aa + b
Ba * b
Ca & b
Dconcat(a, b)
2. Что делает выражение "Сумма: $(2 + 3)" в Julia?
AВыводит «Сумма: $(2 + 3)» буквально
BПодставляет результат выражения: «Сумма: 5»
CВызывает ошибку
DВыводит «Сумма: 23»
3. Почему опасно обращаться к строке по числовому индексу при наличии не-ASCII символов?
AИндексация в Julia запрещена
BСтроки в UTF-8: один символ может занимать несколько байтов, и индекс может попасть в середину символа
CСтроки нумеруются с нуля и индекс сместится
DЭто всегда вызывает переполнение