如何在Rust中实现最佳的字符串缓冲区?

27

如果我想对一个字符串进行多次小的添加,最好的方法是什么?是否有适合这种操作的数据类型?


不太清楚您的要求。缓冲区可以有多种用途。也许与具有Interned Strings(如Java或C#)的语言进行类比,因为它们引入了“StringBuffer”的概念,这样会更清晰明了。 - Matthieu M.
2个回答

42

使用字符串原生类型,它被设计成可变且易于增长。

let mut s = String::new();
s.push_str("GET / HTTP/1.0\r\n");
s.push_str("User-Agent: foobar\r\n"); // Etc etc

5
如果“添加”的不是 &str 类型,你可以使用目标 String 作为 Writer 来推送其他数据类型的字符串表示形式:
fn main() {
    let mut target_string = String::new();
    use std::fmt::Write;
    write!(target_string, "an integer: {}\n", 42).unwrap();
    writeln!(target_string, "a boolean: {}", true).unwrap();

    assert_eq!("an integer: 42\na boolean: true\n", target_string);
}

这个宏需要 Write trait。

任何实现了 write 的类型都可以被 write! 写入。使用 Write 方法前,需要先将其导入当前上下文。可以使用 use std::fmt::Write; 导入 Write trait。

文档链接:

这篇答案所使用的参考资料: Rust String concatenation


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