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

문자열 비교

두 문자열을 비교하기 위해 == 또는 === 연산자를 사용할 수 있습니다. 예를 들면

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. 아니. 기능과 목적
1

at(string, position)

주어진 utf8 문자열의 위치에있는 자소를 반환합니다. 위치가 문자열 길이보다 크면 nil을 반환합니다.

2

capitalize(string)

주어진 문자열의 첫 번째 문자를 대문자로, 나머지는 소문자로 변환합니다.

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)

선행 및 후행 공백을 무시하고 각 유니 코드 공백 발생에서 문자열을 하위 문자열로 나눕니다. 공백 그룹은 단일 항목으로 처리됩니다. 구분이 끊기지 않는 공백에서 발생하지 않습니다.

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로 나눌 수있는 비트 문자열이라고 말할 수 있습니다. 패턴 일치는 바이너리뿐만 아니라 비트 문자열에서도 동일한 방식으로 작동합니다.