如何将Vec<char>转换为字符串

135
如何将 Vec<char> 转换为字符串形式以便打印输出?
2个回答

189

在迭代器上使用collect()

let v = vec!['a', 'b', 'c', 'd'];
let s: String = v.into_iter().collect();
println!("{}", s);

原始向量将被消耗。如果需要保留它,请使用 v.iter()

let s: String = v.iter().collect();

没有更直接的方法,因为char是32位Unicode标量值,而在Rust中,字符串是以UTF-8编码的字节序列(u8)表示文本的序列。它们不能直接映射到char序列。


2
如果您不想使用s,且只需要这个字符串暂时存在,您可以这样做:v.iter().collect::<String>() - Baqir Khan
1
顺便提一下,在 Rust 中,::<> 被称为 turbofish - Srikar

52

以下是一个更易读的版本,它使用了向量:

use std::iter::FromIterator;

fn main() {
    let v = vec!['a', 'b', 'c', 'd'];
    let s = String::from_iter(v);
    // vs
    let s: String = v.into_iter().collect();
}

请注意,collect 是通过调用 FromIterator::from_iter 实现的:

fn collect<B: FromIterator<Self::Item>>(self) -> B
where
    Self: Sized,
{
    FromIterator::from_iter(self)
}

1
如果您不想使用该向量,可以调用 String::from_iter(&v) - darque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接