Учебники

Эликсир — Струны

Строки в Elixir вставляются между двойными кавычками и кодируются в UTF-8. В отличие от C и C ++, где строки по умолчанию кодируются в ASCII и возможны только 256 различных символов, UTF-8 состоит из 66536 кодовых точек . Это означает, что кодировка UTF-8 состоит из множества возможных символов. Поскольку в строках используется utf-8, мы также можем использовать такие символы, как: ö, ł и т. Д.

Создать строку

Чтобы создать строковую переменную, просто назначьте строку переменной —

str = "Hello world"

Чтобы распечатать это на вашей консоли, просто вызовите функцию IO.puts и передайте ей переменную str —

Live Demo

str = str = "Hello world" 
IO.puts(str)

Вышеуказанная программа генерирует следующий результат —

Hello World

Пустые строки

Вы можете создать пустую строку, используя строковый литерал «» . Например,

Live Demo

a = ""
if String.length(a) === 0 do
   IO.puts("a is an empty string")
end

Вышеуказанная программа генерирует следующий результат.

a is an empty string

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

Строковая интерполяция — это способ создания нового значения String из набора констант, переменных, литералов и выражений путем включения их значений в строковый литерал. Elixir поддерживает интерполяцию строк, чтобы использовать переменную в строке при ее написании, заключить ее в фигурные скобки и добавить к фигурным скобкам знак «#» .

Например,

Live Demo

x = "Apocalypse" 
y = "X-men #{x}"
IO.puts(y)

Это возьмет значение x и подставит его в y. Приведенный выше код сгенерирует следующий результат —

X-men Apocalypse

Конкатенация строк

Мы уже видели использование конкатенации строк в предыдущих главах. Оператор <> используется для объединения строк в Elixir. Объединить 2 строки,

Live Demo

x = "Dark"
y = "Knight"
z = x <> " " <> y
IO.puts(z)

Приведенный выше код генерирует следующий результат —

Dark Knight

Длина строки

Чтобы получить длину строки, мы используем функцию String.length . Передайте строку в качестве параметра, и он покажет вам ее размер. Например,

Live Demo

IO.puts(String.length("Hello"))

При запуске над программой она выдает следующий результат —

5

Сторнирование строки

Чтобы перевернуть строку, передайте ее функции String.reverse. Например,

Live Demo

IO.puts(String.reverse("Elixir"))

Вышеуказанная программа генерирует следующий результат —

rixilE

Сравнение строк

Чтобы сравнить 2 строки, мы можем использовать операторы == или ===. Например,

Live Demo

var_1 = "Hello world"
var_2 = "Hello Elixir"
if var_1 === var_2 do
   IO.puts("#{var_1} and #{var_2} are the same")
else
   IO.puts("#{var_1} and #{var_2} are not the same")
end

Вышеуказанная программа генерирует следующий результат —

Hello world and Hello elixir are not the same.

Соответствие строки

Мы уже видели использование оператора сравнения строк = ~. Чтобы проверить, соответствует ли строка регулярному выражению, мы также можем использовать оператор совпадения строк или String.match? функция. Например,

Live Demo

IO.puts(String.match?("foo", ~r/foo/))
IO.puts(String.match?("bar", ~r/foo/))

Вышеуказанная программа генерирует следующий результат —

true 
false

Это также может быть достигнуто с помощью оператора = ~. Например,

Live Demo

IO.puts("foo" =~ ~r/foo/)

Вышеуказанная программа генерирует следующий результат —

true

Строковые функции

Elixir поддерживает большое количество функций, связанных со строками, некоторые из наиболее часто используемых перечислены в следующей таблице.

Sr.No. Функция и ее назначение
1

в (строка, позиция)

Возвращает графему в позиции заданной строки utf8. Если позиция больше длины строки, он возвращает ноль

2

капитализировать (строка)

Преобразует первый символ в данной строке в верхний регистр, а остаток в нижний регистр

3

содержит? (строка, содержимое)

Проверяет, содержит ли строка какое-либо из заданного содержимого

4

downcase (строка)

Преобразует все символы в данной строке в нижний регистр

5

end_with? (строка, суффиксы)

Возвращает true, если строка заканчивается любым из указанных суффиксов

6

первая (строка)

Возвращает первый графем из строки utf8, ноль, если строка пуста

7

последняя (строка)

Возвращает последнюю графему из строки utf8, ноль, если строка пуста

8

заменить (предмет, шаблон, замена, параметры \\ [])

Возвращает новую строку, созданную путем замены вхождений шаблона в теме с заменой

9

ломтик (строка, начало, длина)

Возвращает подстроку, начинающуюся в начале смещения, и длины len

10

Раскол (строка)

Делит строку на подстроки при каждом появлении пробелов в Юникоде, игнорируя начальные и конечные пробелы. Группы пробелов рассматриваются как единое вхождение. Деления не происходят на неразрывных пробелах

11

Upcase (строка)

Преобразует все символы в данной строке в верхний регистр

в (строка, позиция)

Возвращает графему в позиции заданной строки utf8. Если позиция больше длины строки, он возвращает ноль

капитализировать (строка)

Преобразует первый символ в данной строке в верхний регистр, а остаток в нижний регистр

содержит? (строка, содержимое)

Проверяет, содержит ли строка какое-либо из заданного содержимого

downcase (строка)

Преобразует все символы в данной строке в нижний регистр

end_with? (строка, суффиксы)

Возвращает true, если строка заканчивается любым из указанных суффиксов

первая (строка)

Возвращает первый графем из строки utf8, ноль, если строка пуста

последняя (строка)

Возвращает последнюю графему из строки utf8, ноль, если строка пуста

заменить (предмет, шаблон, замена, параметры \\ [])

Возвращает новую строку, созданную путем замены вхождений шаблона в теме с заменой

ломтик (строка, начало, длина)

Возвращает подстроку, начинающуюся в начале смещения, и длины len

Раскол (строка)

Делит строку на подстроки при каждом появлении пробелов в Юникоде, игнорируя начальные и конечные пробелы. Группы пробелов рассматриваются как единое вхождение. Деления не происходят на неразрывных пробелах

Upcase (строка)

Преобразует все символы в данной строке в верхний регистр

Бинарные

Двоичный файл — это просто последовательность байтов. Двоичные файлы определяются с помощью << >> . Например:

<< 0, 1, 2, 3 >>

Конечно, эти байты могут быть организованы любым способом, даже в последовательности, которая не делает их допустимой строкой. Например,

<< 239, 191, 191 >>

Строки также являются двоичными файлами. А оператор конкатенации строк <> на самом деле является оператором двоичной конкатенации:

IO.puts(<< 0, 1 >> <> << 2, 3 >>)

Приведенный выше код генерирует следующий результат —

<< 0, 1, 2, 3 >>

Обратите внимание на символ ł. Поскольку это кодируется utf-8, это символьное представление занимает 2 байта.

Поскольку каждое число, представленное в двоичном файле, должно быть байтом, когда это значение увеличивается с 255, оно усекается. Чтобы предотвратить это, мы используем модификатор размера, чтобы указать, сколько бит мы хотим, чтобы это число заняло. Например —

IO.puts(<< 256 >>) # truncated, it'll print << 0 >>
IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>

Вышеуказанная программа сгенерирует следующий результат —

<< 0 >>
<< 1, 0 >>

Мы также можем использовать модификатор utf8, если символ является точкой кода, он будет получен в выводе; иначе байты —

Live Demo

IO.puts(<< 256 :: utf8 >>)

Вышеуказанная программа генерирует следующий результат —

Ā

У нас также есть функция is_binary, которая проверяет, является ли данная переменная двоичной. Обратите внимание, что только переменные, которые хранятся как кратные 8 бит, являются двоичными файлами.

Bitstrings

Если мы определим двоичный файл с использованием модификатора размера и передадим ему значение, не кратное 8, мы получим битовую строку вместо двоичного. Например,

bs = << 1 :: size(1) >>
IO.puts(bs)
IO.puts(is_binary(bs))
IO.puts(is_bitstring(bs))

Вышеуказанная программа генерирует следующий результат —

<< 1::size(1) >>
false
true

Это означает, что переменная bs не двоичная, а скорее цепочка битов. Можно также сказать, что двоичный файл — это цепочка битов, в которой число битов делится на 8. Сопоставление с образцом работает с двоичными файлами и с битовыми строками одинаково.