Эликсир - струны

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

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

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

str = "Hello world"

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

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

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

Hello World

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

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

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

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

a is an empty string

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

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

Например,

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

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

X-men Apocalypse

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

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

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

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

Dark Knight

Длина строки

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

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

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

5

Переворачивание строки

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

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

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

rixilE

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

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

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? функция. Например,

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

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

true 
false

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

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

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

true

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

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

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

at(string, position)

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

2

capitalize(string)

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

3

contains?(string, contents)

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

4

downcase(string)

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

5

ends_with?(string, suffixes)

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

6

first(string)

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

7

last(string)

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

8

replace(subject, pattern, replacement, options \\ [])

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

9

slice(string, start, len)

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

10

split(string)

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

11

upcase(string)

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

Двоичные файлы

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

<< 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, если символ является кодовой точкой, тогда он будет создан на выходе; иначе байты -

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

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

Ā

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

Битовые строки

Если мы определим двоичный файл с помощью модификатора размера и передадим ему значение, не кратное 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. Сопоставление с образцом работает как с двоичными файлами, так и со строками битов одинаково.