_std::str
_ の最初の文字を取得したい。メソッド char_at()
は現在不安定です- _slice_chars
_ in _std::string::String
_ .
私が現在思いついた唯一のオプションは次のとおりです。
_let text = "hello world!";
let char_vec:Vec<char> = text.chars().collect();
let ch = char_vec[0];
_
しかし、これは単一の文字を取得するだけで、残りのベクトルを使用しないために過度に思えます。
UTF-8は「文字」が何であるかを定義しないので、あなたが望むものに依存します。この場合、char
sはUnicodeスカラー値であるため、&str
の最初のchar
は1〜4バイトになります。
最初のchar
のみが必要な場合は、Vec<char>
に収集せず、イテレーターを使用します。
let text = "hello world!";
let ch = text.chars().next().unwrap();
&str
の先頭と残りを返す関数を作成しました。
fn car_cdr(s: &str) -> (&str, &str) {
for i in 1..5 {
let r = s.get(0..i);
match r {
Some(x) => return (x, &s[i..]),
None => (),
}
}
(&s[0..0], s)
}
次のように使用します。
let (first_char, remainder) = car_cdr("test");
println!("first char: {}\nremainder: {}", first_char, remainder);
出力は次のようになります。
first char: t
remainder: est
1バイト以上の文字で正常に動作します。