读取字符串直到换行

时间:2015-03-23 09:13:39

标签: 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);
  }
}

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

2 个答案:

答案 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
}