为什么我来自 BufReader::lines 的行不匹配?

Why does my line from BufReader::lines not match?

我正在尝试解析文本文件并查找字符串是否等于我正在使用的当前行 BufReader:

let mut chapter = String::from("Chapter 1\n");

//open file
let file = File::open("document.txt")?;
let reader = BufReader::new(file);

for line in reader.lines() {
    if chapter.eq(&line.unwrap()) {
        println!("chapter found!");
    }
}

但是,if 语句永远不会 returns 为真。我怎样才能正确地将 linereader.lines() 转换成我可以找到匹配项的方式?

来自ReadBuf::lines的文档:

Each string returned will not have a newline byte (the 0xA byte) or CRLF (0xD, 0xA bytes) at the end.

从您的搜索字符串中删除 \n

let mut chapter = String::from("Chapter 1");

没有理由在这里分配String。其他一些变化:

use std::{
    fs::File,
    io::{self, BufRead, BufReader},
};

fn example() -> io::Result<()> {
    let chapter = "Chapter 1";

    let file = File::open("document.txt")?;
    let reader = BufReader::new(file);

    for line in reader.lines() {
        if chapter == line.unwrap() {
            println!("chapter found!");
        }
    }

    Ok(())
}

另请参阅: