Elixir-文字列

Elixirの文字列は二重引用符で囲まれ、UTF-8でエンコードされます。デフォルトの文字列がASCIIでエンコードされ、256の異なる文字しか使用できないCおよびC ++とは異なり、UTF-8は1,112,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

文字列補間

文字列補間は、定数、変数、リテラル、および式の組み合わせから、それらの値を文字列リテラル内に含めることにより、新しい文字列値を構築する方法です。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は、文字列に関連する多数の関数をサポートしています。最もよく使用される関数のいくつかを次の表に示します。

シニア番号 機能とその目的
1

at(string, position)

指定されたutf8文字列の位置にある書記素を返します。位置が文字列の長さより大きい場合、nilを返します

2

capitalize(string)

指定された文字列の最初の文字を大文字に変換し、残りを小文字に変換します

3

contains?(string, contents)

文字列に指定された内容のいずれかが含まれているかどうかを確認します

4

downcase(string)

指定された文字列のすべての文字を小文字に変換します

5

ends_with?(string, suffixes)

文字列が指定されたサフィックスのいずれかで終わる場合はtrueを返します

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バイトを使用します。

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で割り切れるビット文字列であるとも言えます。パターンマッチングは、ビット文字列だけでなくバイナリでも同じように機能します。