Elixir-strings

提供:Dev Guides
移動先:案内検索

エリクサー-弦

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は、文字列に関連する多数の関数をサポートしています。最も使用されるもののいくつかを次の表に示します。

Sr.No. Function and its Purpose
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)

オフセットstartから始まり、長さ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バイトを占有します。

バイナリで表される各数値は1バイトであるため、この値が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で割り切れるビット文字列であるとも言えます。 パターンマッチングは、バイナリとビット文字列で同じように機能します。