📜  获取字符串长度 rust (1)

📅  最后修改于: 2023-12-03 15:27:49.580000             🧑  作者: Mango

Rust获取字符串长度

在Rust中,可以使用标准库中的str类型来表示字符串。对于一个str类型的变量,获取它的长度可以使用len()方法。下面是一个简单的例子:

let s = "Hello, Rust!";
let len = s.len();
println!("Length of '{}' is {}.", s, len);

输出结果为Length of 'Hello, Rust!' is 13.

字符串的编码方式

在Rust中,字符串是以UTF-8编码存储的。UTF-8是一种可变长编码方式,一个字符可以由1~4个字节表示。为了获取一个字符串的长度,需要先将它解码成Unicode字符。可以使用chars方法将一个str类型的字符串转换成一个char类型的字符序列,然后对字符序列求长度即可。

let s = "你好,世界!";
let len = s.chars().count();
println!("Length of '{}' is {}.", s, len);

输出结果为Length of '你好,世界!' is 6.。注意,UTF-8编码下,每个中文字符占用3个字节,所以这个字符串的长度是6。

字符串的字节数

除了字符个数,有时候也需要知道一个字符串占用的字节数。可以使用len()方法获取一个str类型字符串的字节数。同样,UTF-8编码下,一个字符的字节数是变化的。

let s = "你好,世界!";
let byte_len = s.len();
println!("Byte length of '{}' is {}.", s, byte_len);

输出结果为Byte length of '你好,世界!' is 15.。这个字符串占用15个字节,每个中文字符占用3个字节。

字符串的编码长度

在某些情况下,需要知道一个字符串在某种编码方式下的长度。Rust标准库提供了一个叫做str::encode_utf16的方法,可以将一个str类型字符串编码成UTF-16编码。对于一个UTF-16编码的字符串,可以计算它的长度和字节数。

let s = "你好,世界!";
let encoded: Vec<u16> = s.encode_utf16().collect();
let len = encoded.len();
let byte_len = len * 2;
println!("Encoded UTF-16 length of '{}' is {}.", s, len);
println!("Encoded UTF-16 byte length of '{}' is {}.", s, byte_len);

输出结果为:

Encoded UTF-16 length of '你好,世界!' is 6.
Encoded UTF-16 byte length of '你好,世界!' is 12.
总结

在Rust中,获取字符串的长度可以使用len()方法。要注意的是,在UTF-8编码下,一个字符的长度是变化的。针对不同的编码方式,还可以计算字符串的字节数和编码长度。