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