Почему моя строка из BufReader::lines не совпадает?

Я пытаюсь проанализировать текстовый файл и найти, равна ли строка текущей строке, которую я использую 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 никогда не возвращает значение true. Как я могу правильно преобразовать line из reader.lines() в способ, которым я могу найти совпадение?


person J Dub    schedule 15.11.2020    source источник


Ответы (1)


Из документации ReadBuf::lines:

Каждая возвращаемая строка не будет иметь байт новой строки (байт 0xA) или CRLF (байт 0xD, 0xA) в конце.

Удалите \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(())
}

Смотрите также:

person Shepmaster    schedule 15.11.2020
comment
Спасибо большое за вашу помощь! Я действительно новичок в ржавчине, поэтому я очень ценю это. - person J Dub; 15.11.2020