Rust 字符串的基本操作
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
Rust 核心語言只有一種字符串類型,那就是字符串切片 str,它的借用形式更常見 &str。 String 類型,不屬于核心語言,而是由 Rust 標準庫提供。它是一種長度可變、內容可變、擁有所有權的 UTF-8 編碼字符串類型。 創(chuàng)建新字符串 String 其實是矢量類型的封裝,矢量類型 Vec<T> 的許多操作在 String 上都能找到。比如,創(chuàng)建空白字符串的 new() 方法。 如果想使用現(xiàn)成的字符串初始化 String,可以使用 to_string() 方法。所有實現(xiàn) Display 特征的類型都有這個方法,比如字符串字面量。 還可以使用 String::from() 創(chuàng)建字符串。 因為字符串基于 UTF-8,你可以在其中存儲各國語言,甚至包括 emoji。 更新字符串 使用 push_str(string) 向字符串尾部添加新字符串。參數是字符串切片類型 &str,因此不會占有參數的所有權。 使用 push(ch) 向字符串尾部添加單個字符: 拼接兩個 String,可以使用加號 +。加號運算符會調用 add() 函數,其簽名如下:
因此,使用 + 執(zhí)行完拼接操作,原字符串將失去所有權: 當拼接多個字符串,代碼寫起來很不方便: 此時,使用 format! 宏會更方便。format! 宏的用法 println! 宏的用法類似,只不過不是向終端打印信息,而是返回 String 類型的值。 format! 宏的可讀性更好,并且它不會搶奪字符串的所有權,之后可以繼續(xù)使用原來的字符串。 字符串索引 在其他編程語言,訪問字符串索引是個常見操作。但是,如果你在 Rust 中進行此類操作,會得到一個錯誤: 之所以 Rust 禁止對字符串進行索引操作,是因為 UTF-8 是一種變長編碼方案,有的字符使用 1 個字節(jié)表示,有的字符則需要 2 個字節(jié)甚至更多。因此,索引位置和字符并非一一對應。 為了避免含糊不清,防止可能帶來的問題,Rust 干脆禁止在字符串上使用索引值。 Rust 禁用字符串的另一個原因時,索引操作的時間復雜度應當是常量時間O(1)。但這在 UTF-8 中難以實現(xiàn),因為每次它都需要從頭開始遍歷,才能發(fā)現(xiàn)當前位置屬于哪個字符。 字符串切片 如果你確實想截取字符串的一部分,必須要更明確的告知 Rust 編譯器,你期望截取的數據類型,是字節(jié)、字符、還是圖元簇? 比如,你可以使用區(qū)間語法 [a..b] 截取特定范圍內的字節(jié)序列。 如果你截取的字節(jié)序列不是一個完整的 UTF-8 編碼,Rust 會 panic 退出。使用字符串切片務必小心。 遍歷字符串 使用 for 循環(huán)字符串時,務必明確你的遍歷元素類型。 使用 chars() 返回一個遍歷字符的迭代器。 如果想遍歷字符串的所有字節(jié),使用 bytes() 方法: 如果你要遍歷圖元簇,Rust 標準庫不提供這種功能,需要去 crates.io 自行解決。 Storing UTF-8 Encoding Text with Strings https://doc.rust-lang.org/stable/book/ch08-02-strings.html 該文章在 2024/12/28 11:54:43 編輯過 |
關鍵字查詢
相關文章
正在查詢... |