如何在Rust中从标准输入读取的一行中删除换行符和回车符?

6

我想从标准输入中读取一行并将其存储在字符串变量中,然后将字符串值解析为u32整数值。read_line()方法会读取2个额外的UTF-8值,这会导致parse方法出错。

以下是我尝试裁剪回车和换行符的代码:

use std::io;
use std::str;

fn main() {
    let mut input = String::new();
    match io::stdin().read_line(&mut input) {
        Ok(n) => {
            println!("{:?}", input.as_bytes());
            println!("{}", str::from_utf8(&input.as_bytes()[0..n-2]).unwrap());
        }
        Err(e) => {
            println!("{:?}", e);
        }
    }
}

这在Rust中最惯用的方法是什么?

3
你还可以使用 lines() 迭代器,它会自动去掉换行符。 - Sven Marnach
@SvenMarnach为什么不用这个回答呢?对于我这样的新手Rust学习者来说,这是谷歌上的第一个结果。 - ch4rl1e97
1个回答

6

String有一个trim方法,返回一个修剪过的字符串切片:

use std::io;
use std::str;

fn main() {
    let mut input = String::new();
    match io::stdin().read_line(&mut input) {
        Ok(_) => {
            let trimmed_input = input.trim();
            println!("{:?}", trimmed_input.as_bytes());
            println!("{}", trimmed_input);
        }
        Err(e) => {
            println!("{:?}", e);
        }
    }
}

"test"输入的结果:

[116, 101, 115, 116]
test

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