String
String
is a growable UTF-8 encoded string:
fn main() { let mut s1 = String::new(); s1.push_str("Hello"); println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity()); let mut s2 = String::with_capacity(s1.len() + 1); s2.push_str(&s1); s2.push('!'); println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity()); let s3 = String::from("🇨🇭"); println!("s3: len = {}, number of chars = {}", s3.len(), s3.chars().count()); }
String
は Deref<Target = str>
を実装します。つまり、String
のすべての str
メソッドを呼び出すことができます。
This slide should take about 5 minutes.
String::new
は新しい空の文字列を返します。文字列にプッシュするデータの量がわかっている場合はString::with_capacity
を使用します。String::len
は、String
のサイズをバイト単位で返します(文字数とは異なる場合があります)。String::chars
は、実際の文字のイテレータを返します。書記素クラスタにより、char
は人間が「文字」と見なすものとは異なる場合があります。- 人々が文字列について言及する場合、単に
&str
またはString
のことを話している可能性があります。 - 型が
Deref<Target = T>
を実装している場合、コンパイラによりT
からメソッドを透過的に呼び出せるようになります。Deref
トレイトについてはまだ説明していないため、現時点では主にドキュメントのサイドバーの構造について説明しています。String
はDeref<Target = str>
を実装し、str
のメソッドへのアクセスを透過的に許可します。let s3 = s1.deref();
とlet s3 = &*s1;
を記述して比較します。
String
はバイトのベクターのラッパーとして実装されます。ベクターでサポートされているオペレーションの多くはString
でもサポートされていますが、いくつかの保証が追加されています。String
にインデックスを付けるさまざまな方法を比較します。- 文字には
s3.chars().nth(i).unwrap()
を使用します。ここでi
は境界内の場合や境界外の場合を表します。 - 部分文字列には
s3[0..4]
を使用します。このスライスは、文字境界にある場合とない場合があります。
- 文字には
- Many types can be converted to a string with the
to_string
method. This trait is automatically implemented for all types that implementDisplay
, so anything that can be formatted can also be converted to a string.