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