Elixier - Saiten
Zeichenfolgen in Elixir werden zwischen doppelte Anführungszeichen eingefügt und in UTF-8 codiert. Im Gegensatz zu C und C ++, bei denen die Standardzeichenfolgen ASCII-codiert sind und nur 256 verschiedene Zeichen möglich sind, besteht UTF-8 aus 1.112.064 Codepunkten. Dies bedeutet, dass die UTF-8-Codierung aus diesen vielen verschiedenen möglichen Zeichen besteht. Da die Zeichenfolgen utf-8 verwenden, können wir auch Symbole wie ö, ł usw. verwenden.
Erstellen Sie einen String
Um eine Zeichenfolgenvariable zu erstellen, weisen Sie einer Variablen einfach eine Zeichenfolge zu.
str = "Hello world"
Um dies auf Ihre Konsole zu drucken, rufen Sie einfach die IO.puts Funktion und übergeben Sie ihm die Variable str -
str = str = "Hello world"
IO.puts(str)
Das obige Programm generiert das folgende Ergebnis:
Hello World
Leere Saiten
Sie können eine leere Zeichenfolge mit dem Zeichenfolgenliteral erstellen. "". Zum Beispiel,
a = ""
if String.length(a) === 0 do
IO.puts("a is an empty string")
end
Das obige Programm generiert das folgende Ergebnis.
a is an empty string
String-Interpolation
Die String-Interpolation ist eine Möglichkeit, einen neuen String-Wert aus einer Mischung von Konstanten, Variablen, Literalen und Ausdrücken zu erstellen, indem deren Werte in ein String-Literal eingefügt werden. Elixir unterstützt die String-Interpolation, um beim Schreiben eine Variable in einem String zu verwenden, diese mit geschweiften Klammern zu umschließen und den geschweiften Klammern ein a voranzustellen'#' Zeichen.
Zum Beispiel,
x = "Apocalypse"
y = "X-men #{x}"
IO.puts(y)
Dies nimmt den Wert von x und ersetzt ihn durch y. Der obige Code generiert das folgende Ergebnis:
X-men Apocalypse
String-Verkettung
Wir haben bereits in früheren Kapiteln die Verwendung der String-Verkettung gesehen. Der Operator '<>' wird verwendet, um Zeichenfolgen in Elixir zu verketten. Um 2 Zeichenfolgen zu verketten,
x = "Dark"
y = "Knight"
z = x <> " " <> y
IO.puts(z)
Der obige Code generiert das folgende Ergebnis:
Dark Knight
String-Länge
Um die Länge der Zeichenfolge zu ermitteln, verwenden wir die String.lengthFunktion. Übergeben Sie den String als Parameter und er zeigt Ihnen seine Größe. Zum Beispiel,
IO.puts(String.length("Hello"))
Wenn das obige Programm ausgeführt wird, wird folgendes Ergebnis erzielt:
5
String umkehren
Um einen String umzukehren, übergeben Sie ihn an die Funktion String.reverse. Zum Beispiel,
IO.puts(String.reverse("Elixir"))
Das obige Programm generiert das folgende Ergebnis:
rixilE
String-Vergleich
Um 2 Zeichenfolgen zu vergleichen, können wir die Operatoren == oder === verwenden. Zum Beispiel,
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
Das obige Programm generiert das folgende Ergebnis:
Hello world and Hello elixir are not the same.
String Matching
Wir haben bereits die Verwendung des = ~ string match-Operators gesehen. Um zu überprüfen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt, können Sie auch den Zeichenfolgenübereinstimmungsoperator oder String.match? Verwenden. Funktion. Zum Beispiel,
IO.puts(String.match?("foo", ~r/foo/))
IO.puts(String.match?("bar", ~r/foo/))
Das obige Programm generiert das folgende Ergebnis:
true
false
Dies kann auch mit dem Operator = ~ erreicht werden. Zum Beispiel,
IO.puts("foo" =~ ~r/foo/)
Das obige Programm generiert das folgende Ergebnis:
true
String-Funktionen
Elixir unterstützt eine Vielzahl von Funktionen, die sich auf Zeichenfolgen beziehen. Einige der am häufigsten verwendeten sind in der folgenden Tabelle aufgeführt.
Sr.Nr. | Funktion und Zweck |
---|---|
1 | at(string, position) Gibt das Graphem an der Position der angegebenen utf8-Zeichenfolge zurück. Wenn die Position größer als die Zeichenfolgenlänge ist, wird null zurückgegeben |
2 | capitalize(string) Konvertiert das erste Zeichen in der angegebenen Zeichenfolge in Großbuchstaben und den Rest in Kleinbuchstaben |
3 | contains?(string, contents) Überprüft, ob die Zeichenfolge einen der angegebenen Inhalte enthält |
4 | downcase(string) Konvertiert alle Zeichen in der angegebenen Zeichenfolge in Kleinbuchstaben |
5 | ends_with?(string, suffixes) Gibt true zurück, wenn die Zeichenfolge mit einem der angegebenen Suffixe endet |
6 | first(string) Gibt das erste Graphem aus einer utf8-Zeichenfolge zurück, null, wenn die Zeichenfolge leer ist |
7 | last(string) Gibt das letzte Graphem aus einer utf8-Zeichenfolge zurück, null, wenn die Zeichenfolge leer ist |
8 | replace(subject, pattern, replacement, options \\ []) Gibt eine neue Zeichenfolge zurück, die durch Ersetzen von Mustervorkommen im Betreff durch Ersetzen erstellt wurde |
9 | slice(string, start, len) Gibt einen Teilstring zurück, der am Versatzstart beginnt und die Länge len hat |
10 | split(string) Teilt eine Zeichenfolge bei jedem Auftreten von Unicode-Leerzeichen in Teilzeichenfolgen, wobei führende und nachfolgende Leerzeichen ignoriert werden. Gruppen von Leerzeichen werden als ein einzelnes Vorkommen behandelt. Auf nicht unterbrechenden Leerzeichen treten keine Unterteilungen auf |
11 | upcase(string) Konvertiert alle Zeichen in der angegebenen Zeichenfolge in Großbuchstaben |
Binärdateien
Eine Binärdatei ist nur eine Folge von Bytes. Binärdateien werden mit definiert<< >>. Zum Beispiel:
<< 0, 1, 2, 3 >>
Natürlich können diese Bytes auf irgendeine Weise organisiert werden, selbst in einer Sequenz, die sie nicht zu einer gültigen Zeichenfolge macht. Zum Beispiel,
<< 239, 191, 191 >>
Strings sind auch Binärdateien. Und der String-Verkettungsoperator<> ist eigentlich ein binärer Verkettungsoperator:
IO.puts(<< 0, 1 >> <> << 2, 3 >>)
Der obige Code generiert das folgende Ergebnis:
<< 0, 1, 2, 3 >>
Beachten Sie das Zeichen ł. Da dies utf-8-codiert ist, nimmt diese Zeichendarstellung 2 Bytes ein.
Da jede in einer Binärdatei dargestellte Zahl ein Byte sein soll, wird dieser Wert abgeschnitten, wenn er von 255 aufsteigt. Um dies zu verhindern, verwenden wir den Größenmodifikator, um anzugeben, wie viele Bits diese Zahl annehmen soll. Zum Beispiel -
IO.puts(<< 256 >>) # truncated, it'll print << 0 >>
IO.puts(<< 256 :: size(16) >>) #Takes 16 bits/2 bytes, will print << 1, 0 >>
Das obige Programm generiert das folgende Ergebnis:
<< 0 >>
<< 1, 0 >>
Wir können auch den Modifikator utf8 verwenden. Wenn ein Zeichen ein Codepunkt ist, wird es in der Ausgabe erzeugt. sonst die Bytes -
IO.puts(<< 256 :: utf8 >>)
Das obige Programm generiert das folgende Ergebnis:
Ā
Wir haben auch eine Funktion namens is_binarydas prüft, ob eine gegebene Variable eine Binärdatei ist. Beachten Sie, dass nur Variablen, die als Vielfaches von 8 Bit gespeichert sind, Binärdateien sind.
Bitstrings
Wenn wir eine Binärdatei mit dem Größenmodifikator definieren und ihr einen Wert übergeben, der kein Vielfaches von 8 ist, erhalten wir eine Bitfolge anstelle einer Binärdatei. Zum Beispiel,
bs = << 1 :: size(1) >>
IO.puts(bs)
IO.puts(is_binary(bs))
IO.puts(is_bitstring(bs))
Das obige Programm generiert das folgende Ergebnis:
<< 1::size(1) >>
false
true
Dies bedeutet diese Variable bsist keine Binärdatei, sondern eine Bitfolge. Wir können auch sagen, dass eine Binärdatei eine Bitfolge ist, bei der die Anzahl der Bits durch 8 teilbar ist. Der Mustervergleich funktioniert sowohl für Binärdateien als auch für Bitfolgen auf die gleiche Weise.