Elixir - Chuỗi
Các chuỗi trong Elixir được chèn vào giữa dấu ngoặc kép và chúng được mã hóa bằng UTF-8. Không giống như C và C ++ trong đó các chuỗi mặc định được mã hóa ASCII và chỉ có thể có 256 ký tự khác nhau, UTF-8 bao gồm 1.112.064 điểm mã. Điều này có nghĩa là mã hóa UTF-8 bao gồm nhiều ký tự có thể có khác nhau. Vì các chuỗi sử dụng utf-8, chúng ta cũng có thể sử dụng các ký hiệu như: ö, ł, v.v.
Tạo một chuỗi
Để tạo một biến chuỗi, chỉ cần gán một chuỗi cho một biến -
str = "Hello world"
Để in cái này ra bảng điều khiển của bạn, chỉ cần gọi IO.puts và chuyển cho nó biến str -
str = str = "Hello world"
IO.puts(str)
Chương trình trên tạo ra kết quả sau:
Hello World
Chuỗi trống
Bạn có thể tạo một chuỗi trống bằng cách sử dụng chuỗi ký tự, "". Ví dụ,
a = ""
if String.length(a) === 0 do
IO.puts("a is an empty string")
end
Chương trình trên tạo ra kết quả sau.
a is an empty string
Nội suy chuỗi
Nội suy chuỗi là một cách để xây dựng một giá trị Chuỗi mới từ hỗn hợp các hằng số, biến, ký tự và biểu thức bằng cách bao gồm các giá trị của chúng bên trong một ký tự chuỗi. Elixir hỗ trợ nội suy chuỗi, để sử dụng một biến trong một chuỗi, khi viết nó, hãy bọc nó bằng dấu ngoặc nhọn và thêm vào trước dấu ngoặc nhọn bằng một'#' ký tên.
Ví dụ,
x = "Apocalypse"
y = "X-men #{x}"
IO.puts(y)
Điều này sẽ lấy giá trị của x và thay thế nó bằng y. Đoạn mã trên sẽ tạo ra kết quả sau:
X-men Apocalypse
Kết nối chuỗi
Chúng ta đã thấy việc sử dụng nối chuỗi trong các chương trước. Toán tử '<>' được sử dụng để nối các chuỗi trong Elixir. Để nối 2 chuỗi,
x = "Dark"
y = "Knight"
z = x <> " " <> y
IO.puts(z)
Đoạn mã trên tạo ra kết quả sau:
Dark Knight
Chiều dài chuỗi
Để có được độ dài của chuỗi, chúng tôi sử dụng String.lengthchức năng. Chuyển chuỗi làm tham số và nó sẽ hiển thị cho bạn kích thước của nó. Ví dụ,
IO.puts(String.length("Hello"))
Khi chạy chương trình trên, nó tạo ra kết quả sau:
5
Đảo ngược một chuỗi
Để đảo ngược một chuỗi, hãy chuyển nó vào hàm String.reverse. Ví dụ,
IO.puts(String.reverse("Elixir"))
Chương trình trên tạo ra kết quả sau:
rixilE
So sánh chuỗi
Để so sánh 2 chuỗi, chúng ta có thể sử dụng toán tử == hoặc ===. Ví dụ,
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
Chương trình trên tạo ra kết quả sau:
Hello world and Hello elixir are not the same.
Khớp chuỗi
Chúng ta đã thấy việc sử dụng toán tử đối sánh chuỗi = ~. Để kiểm tra xem một chuỗi có khớp với một regex hay không, chúng ta cũng có thể sử dụng toán tử so khớp chuỗi hoặc String.match? chức năng. Ví dụ,
IO.puts(String.match?("foo", ~r/foo/))
IO.puts(String.match?("bar", ~r/foo/))
Chương trình trên tạo ra kết quả sau:
true
false
Điều này cũng có thể đạt được bằng cách sử dụng toán tử = ~. Ví dụ,
IO.puts("foo" =~ ~r/foo/)
Chương trình trên tạo ra kết quả sau:
true
Hàm chuỗi
Elixir hỗ trợ một số lượng lớn các hàm liên quan đến chuỗi, một số hàm được sử dụng nhiều nhất được liệt kê trong bảng sau.
Sr.No. | Chức năng và Mục đích của nó |
---|---|
1 | at(string, position) Trả về grapheme tại vị trí của chuỗi utf8 đã cho. Nếu vị trí lớn hơn độ dài chuỗi, thì nó trả về nil |
2 | capitalize(string) Chuyển đổi ký tự đầu tiên trong chuỗi đã cho thành chữ hoa và phần còn lại thành chữ thường |
3 | contains?(string, contents) Kiểm tra xem chuỗi có chứa bất kỳ nội dung đã cho nào không |
4 | downcase(string) Chuyển đổi tất cả các ký tự trong chuỗi đã cho thành chữ thường |
5 | ends_with?(string, suffixes) Trả về true nếu chuỗi kết thúc bằng bất kỳ hậu tố nào đã cho |
6 | first(string) Trả về grapheme đầu tiên từ chuỗi utf8, nil nếu chuỗi trống |
7 | last(string) Trả về grapheme cuối cùng từ chuỗi utf8, nil nếu chuỗi trống |
số 8 | replace(subject, pattern, replacement, options \\ []) Trả về một chuỗi mới được tạo bằng cách thay thế các lần xuất hiện của mẫu trong chủ đề bằng thay thế |
9 | slice(string, start, len) Trả về một chuỗi con bắt đầu từ điểm bắt đầu offset và có độ dài len |
10 | split(string) Chia một chuỗi thành các chuỗi con tại mỗi lần xuất hiện khoảng trắng Unicode với khoảng trắng đầu và cuối bị bỏ qua. Các nhóm khoảng trắng được coi là một lần xuất hiện duy nhất. Sự phân chia không xảy ra trên khoảng trắng không đứt quãng |
11 | upcase(string) Chuyển đổi tất cả các ký tự trong chuỗi đã cho thành chữ hoa |
Binaries
Một nhị phân chỉ là một chuỗi các byte. Binaries được xác định bằng cách sử dụng<< >>. Ví dụ:
<< 0, 1, 2, 3 >>
Tất nhiên, những byte đó có thể được tổ chức theo bất kỳ cách nào, ngay cả trong một chuỗi không làm cho chúng trở thành một chuỗi hợp lệ. Ví dụ,
<< 239, 191, 191 >>
Các chuỗi cũng là các mã nhị phân. Và toán tử nối chuỗi<> thực sự là một toán tử nối nhị phân:
IO.puts(<< 0, 1 >> <> << 2, 3 >>)
Đoạn mã trên tạo ra kết quả sau:
<< 0, 1, 2, 3 >>
Lưu ý ký tự ł. Vì điều này được mã hóa utf-8, biểu diễn ký tự này chiếm 2 byte.
Vì mỗi số được biểu diễn trong hệ nhị phân có nghĩa là một byte, khi giá trị này tăng lên từ 255, nó sẽ bị cắt bớt. Để ngăn chặn điều này, chúng tôi sử dụng công cụ sửa đổi kích thước để chỉ định số lượng bit mà chúng tôi muốn lấy. Ví dụ -
IO.puts(<< 256 >>) # truncated, it'll print << 0 >>
IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>
Chương trình trên sẽ tạo ra kết quả sau:
<< 0 >>
<< 1, 0 >>
Chúng ta cũng có thể sử dụng công cụ sửa đổi utf8, nếu một ký tự là điểm mã thì nó sẽ được tạo trong đầu ra; khác các byte -
IO.puts(<< 256 :: utf8 >>)
Chương trình trên tạo ra kết quả sau:
Ā
Chúng tôi cũng có một chức năng được gọi là is_binarykiểm tra xem một biến đã cho có phải là một nhị phân hay không. Lưu ý rằng chỉ các biến được lưu trữ dưới dạng bội số của 8bit mới là mã nhị phân.
Chuỗi bit
Nếu chúng ta xác định một hệ nhị phân bằng cách sử dụng công cụ sửa đổi kích thước và chuyển cho nó một giá trị không phải là bội số của 8, chúng ta sẽ có một chuỗi bit thay vì một nhị phân. Ví dụ,
bs = << 1 :: size(1) >>
IO.puts(bs)
IO.puts(is_binary(bs))
IO.puts(is_bitstring(bs))
Chương trình trên tạo ra kết quả sau:
<< 1::size(1) >>
false
true
Điều này có nghĩa là biến bskhông phải là một nhị phân mà là một chuỗi bit. Chúng ta cũng có thể nói rằng nhị phân là một chuỗi bit trong đó số bit chia hết cho 8. So khớp mẫu hoạt động trên các mã nhị phân cũng như chuỗi bit theo cùng một cách.