Je veux obtenir le premier caractère d'un std::str
. La méthode char_at()
est actuellement instable, de même que slice_chars
in std::string::String
.
La seule option que je propose actuellement est la suivante.
let text = "hello world!";
let char_vec:Vec<char> = text.chars().collect();
let ch = char_vec[0];
Mais cela semble excessif d’obtenir un seul caractère et de ne pas utiliser le reste du vecteur.
UTF-8 ne définit pas le "caractère", cela dépend donc de ce que vous voulez. Dans ce cas, les char
s sont des valeurs scalaires Unicode et le premier char
d'un &str
sera compris entre un et quatre octets.
Si vous voulez seulement la première char
, ne collectez pas dans un Vec<char>
, utilisez simplement l'itérateur:
let text = "hello world!";
let ch = text.chars().next().unwrap();
J'ai écrit une fonction qui retourne la tête d'un &str
et le reste:
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)
}
Utilisez-le comme ceci:
let (first_char, remainder) = car_cdr("test");
println!("first char: {}\nremainder: {}", first_char, remainder);
La sortie ressemble à:
first char: t
remainder: est
Cela fonctionne bien avec les caractères qui sont plus que 1 octet.