Basée sur la Rust book , la méthode String::len
Renvoie le nombre d'octets composant la chaîne, qui peut ne pas correspondre à la longueur en caractères.
Par exemple, si nous considérons la chaîne suivante en japonais, len()
retournerait 30, qui est le nombre d'octets et non le nombre de caractères, qui serait 10:
let s = String::from("ラウトは難しいです!");
s.len() // returns 30.
Le seul moyen que j'ai trouvé pour obtenir le nombre de caractères est d'utiliser la fonction suivante:
s.chars().count()
qui renvoie 10 et est le nombre correct de caractères.
Existe-t-il une méthode sur String
qui renvoie le nombre de caractères, à part celle que j'utilise ci-dessus?
Existe-t-il une méthode sur
String
qui renvoie le nombre de caractères, à part celle que j'utilise ci-dessus?
Non. L'utilisation de s.chars().count()
est correcte. Notez qu'il s'agit d'une opération O(N) (car UTF-8 est complexe) tandis que l'obtention du nombre d'octets est une opération O(1)).
Vous pouvez voir toutes les méthodes sur str
par vous-même.
Comme indiqué dans les commentaires, un char
est un concept spécifique:
Il est important de se rappeler que
char
représente une valeur scalaire Unicode et peut ne pas correspondre à votre idée de ce qu'est un "caractère". L'itération sur les grappes de graphèmes peut être ce que vous voulez réellement.
Un tel exemple est avec des caractères précomposés:
fn main() {
println!("{}", "é".chars().count()); // 2
println!("{}", "é".chars().count()); // 1
}