下面的代码对我来说很好。
let mut buffer = String::new();
io::stdin().read_line(&mut buffer);
buffer = buffer.trim().to_string();
从'\n'
修剪read_line
的更好/正确的方法是什么?
答案 0 :(得分:2)
我只看到一个可以在您的代码中进行改进的方面:您分配了两个字符串以读取一行的事实。第一次分配发生在将行读入buffer
时,第二次分配发生在to_string()
中。
根据上下文,有几种方法可以避免这种情况。最简单的方法是避免调用to_string
,而继续使用&str
而不是String
。如果这对您不起作用,您还可以编写自己的函数以在字符串末尾修剪换行符:
fn trim_newline(s: &mut String) {
if s.ends_with('\n') {
s.pop();
if s.ends_with('\r') {
s.pop();
}
}
}
这不等同于原始代码中的trim()
,因为它仅从字符串末尾删除换行符,而不是从字符串末尾删除任意空格。
另一种选择是使用lines()
迭代器,该迭代器从stdin生成行而不会终止换行符:
use std::io::{BufRead};
let stdin = std::io::stdin();
for line in stdin.lock().lines() {
let line = line?; // line is a Result<String, io::Error>
}