读取字符串,直到换行

use*_*985 4 rust

我正在尝试从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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这根本不起作用,我正在打印所有字符,包括\ n。

oli*_*obk 5

看看上的lines方法BufRead。该函数在缓冲区的所有行上返回迭代器。你可以得到一个BufReadStdin通过lock的功能。如果您查看其中的文档,lines将会发现它不会返回换行符。将此与read_line返回换行符char 的函数进行比较。

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");
    }
}
Run Code Online (Sandbox Code Playgroud)