我试图从ls命令中获取输出。如何通过换行符分隔字符串?目前我的代码如下所示:
let input = std::old_io::stdin().read_line().ok().expect("Failed to read line");
for c in input.chars() {
if c == '\n' {
break;
} else {
println!("{}", c);
}
}
这根本不起作用,我正在打印所有字符,包括\ n。
答案 0 :(得分:5)
查看BufRead
上的lines
方法。该函数在缓冲区的所有行上返回一个迭代器。您可以通过BufRead
功能从Stdin
获得lock
。如果您查看lines
的文档,您可以看到,它不会返回换行符。将此与返回换行符的read_line
函数进行比较。
use std::io::BufRead;
fn main() {
// get stdin handle
let stdin = std::io::stdin();
// lock it
let lock = stdin.lock();
// iterate over all lines
for line in lock.lines() {
// iterate over the characters in the line
for c in line.unwrap().chars() {
println!("{}", c);
}
println!("next line");
}
}
答案 1 :(得分:2)
很难从解释中理解你真正想要的是什么,但如果你想从输入中读取每一行而没有换行符,你可以使用lines()
迭代器。以下是新std::io
的版本:
use std::io::BufRead;
let input = std::io::stdin();
for line in input.lock().lines() {
// here line is a String without the trailing newline
}