Zum Inhalt springen

2_Strings

Rust Strings sind Unicode codiert.

  • Variable Byte-Länge
  • 1-4 Bytes pro Zeichen
  • Rückwärtskompatibilität zu ASCII
  • Verbreitet
  • Multilingual

let s = "This is a \"string\" literal.\n";
  • Backslash escaped Newline
let s = "This is a multiline
\"string\" literal.\n";
let s = "This is a multiline
string literal. With \
no more lines.
\n";
  • Backslashes werden nich interpretiert
  • Nuetzlich fuer Windows-Pfade und Regular-Expressions
let path = r"This is a raw string literal. C:\Users\public";
let regex = r"\d+\.(jpg|png)";
  • Referenz auf ein Array von Bytes &[u8, 4]
let byte_str = b"POST";

  • str ist im voarallokierten Speicher im Data-Segment (binary)

s.to_string() &str zu String


  • String ist ein variabler Buffer im Heap
  • Wie ein Vec<u8> der korrekte UTF8 Werte enthaelt

s.trim() Whitespace und \n entfernen

s1 == s2 Vergleich gleiche Zeichenfolge, egal wo gespeichert

s.is_empty() Leerer String

s.split(", ") String zu Iterator

let a = String::from("Bye 🌚︎");
a.capacity() // -> 12 buffer size
a.len() // -> 11 bytes
a.chars().count(); // 6 chars
let s = vec!["OK", "Computer", "Notok"];
s.concat(); // "OKComputerNotok"
s.join(" "); // "Ok Computer Notok"

  • String-slice ist eine Referenz auf einen UTF8-String
  • Nur eine Referenz, daher borrowed, der Speicher gehoert der der Variablen nicht
  • Unveraenderbar
  • Wie ein &[u8] das korrekte UTF8 Werte enthaelt

&str oder String Eine Funktion fn func(s: &str) nimmt


  • String oder &str fuer Unicode
  • PathBuf oder &Path fuer Dateinamen
  • OsString oder &OsStr fuer Umgebungsvariablen und CMD-Argumente
  • Vec<u8> oder &[u8] fuer binaere Daten ohne Codierung