Rust 的字串
前面雖然在 Rust 的基本型別有提到字元,但是由於字串跟字元不太一樣,而且覺得蠻有趣的,所以本篇將會專門介紹字串。
字串常值
字串常值的使用方式跟字元常值不一樣的地方在於,是使用 ""
來將文字包起來,看起來就像這樣:
1 | let msg = "Hello World!"; |
也就是說 msg
的值就是一個字串常值(string literial),但只要先記住只要用 ""
包起來的就是字串常值就好了,因為接下來還有比較複雜的部分要稍微理解一下。
Rust 的字串是一種編碼成 UTF-8 的 Unicode 數值,並且一共有 6 種型別,但最主要以及最常用的有兩種,分別是:
&str
String
String
首先 String
可以經由字串常值加上 to_string()
宣告,或者是使用以下方式宣告:
1 | let x = String::from("This is a pen!"); |
字串以我自己的用途來說,比較多用在組合字串上,那這邊來介紹一下幾種作法,讓大家參考一下。
用 + 來組合
這應該是蠻普遍的作法,甚至在其他語言中也有,寫法如下:
1 | let x = "Rust".to_string(); |
format!
雖然用 + 來組合算是滿簡單的,但如果要組合的字很多的話,寫起來在閱讀上就不是很方便。但還好 Rust 有提供 format!
這個巨集來處理,寫起來的閱讀性也比較好,寫法是這樣:
1 | let x = "Rust".to_string(); |
兩種方法都可以使用,就看你比較喜歡哪一種。
字串切片
&str
(字串切片),讀成 string slice 或是 stir。
字串切片跟 String
不一樣,是一種固定大小的類型,並且不可變的。而且是一種指向別的 UTF-8 擁有的文字,也就是說 「借用」別人的文字。在這個範例中,y 就是 &str
,y 參考了 x 所擁有的文字,從 5 bytes 之後開始算,所以 y 的值為 “is a pen!”
如果要指定從第一個開始到第四個的話,可以這樣寫:
1 | let y = &x[0..4]; |
如果是從索引零開始的話,甚至可以省略掉 0:
1 | let y = &x[..4]; |
也可以藉由 len()
計算總長度來操作:
像一開始的範例,跟下面的結果是一樣的:
1 | let x = "This is a pen!".to_string(); |
如果要拿到全部的話,下面兩種寫法是一樣的:
- 第一種寫法
1 | let len = x.len(); |
- 第二種寫法
1 | let y = &x[..]; |
Rust 的字串用途很廣泛,身為一個工程師在字串上是無可避免一定會碰到的,雖然我自己覺得是有點複雜,但其實多寫幾個範例就比較容易理解了。