uebu-kaihatsu.jp.net

Rustの文字列の長さを取得する

Rust book )に基づいて、_String::len_メソッドは文字列を構成するバイト数を返しますが、これは文字の長さに対応しない場合があります。

たとえば、次の日本語の文字列を考慮する場合、len()は30を返します。これはバイト数であり、文字数ではなく10です。

_let s = String::from("ラウトは難しいです!");
s.len() // returns 30.
_

文字数を取得する唯一の方法は、次の関数を使用することです。

_s.chars().count()
_

これは10を返し、正しい文字数です。

上記で使用しているものとは別に、文字カウントを返すStringのメソッドはありますか?

17

上記で使用しているものとは別に、文字カウントを返すStringのメソッドはありますか?

いいえ。s.chars().count()の使用は正しいです。これはO(N)操作(UTF-8は複雑なため)です。バイト数を取得することはO(1)操作です。

strのすべてのメソッド を自分で確認できます。

コメントで指摘したように、charは特定の概念です。

charはUnicodeスカラー値を表し、「文字」が何であるかという考えと一致しない場合があることを覚えておくことが重要です。書記素クラスターに対する反復が実際に必要な場合があります。

そのような例の1つは、事前に構成された文字の場合です。

fn main() {
    println!("{}", "é".chars().count()); // 2
    println!("{}", "é".chars().count()); // 1
}
17
Shepmaster