为什么在按行然后按单词拆分文件时得到一个空向量?

Why do I get an empty vector when splitting a file by lines and then words?

我正在尝试使用 Rust 读取一个文本文件,其中每一行都有两个由空格分隔的单词。我必须得到第一个单词的长度:

use std::fs;

fn main() {
    let contents = fs::read_to_string("src/input.txt").expect("Wrong file name!");

    for line in contents.split("\n") {
        let tokens: Vec<&str> = line.split_whitespace().collect();

        println!("{}", tokens[0].len());
    }
}

input.txt文件的内容是:

monk perl

我运行正在 Windows 上使用货物 运行。我收到以下错误(因为 tokens[0].len()):

4
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0'

我不知道我的代码有什么问题。文件“input.txt”不为空。

通过使用 .split("\n"),您将在迭代器中获得两项。一个是您期望的行,另一个是换行符后的空字符串。空字符串在拆分为单词时是空的。这意味着向量将为空,索引 0 处没有项目。

改用str::lines

use std::fs;

fn main() {
    let contents = fs::read_to_string("src/input.txt").expect("AWrong file name!");

    for line in contents.lines() {
        let tokens: Vec<_> = line.split_whitespace().collect();

        println!("{}", tokens[0].len());
    }
}

另请参阅:

  • Is this the right way to read lines from file and split them into words in Rust?
use std::fs;

fn main() {
    let contents = fs::read_to_string("text.txt").expect("Wrong file name!");

    for line in contents.split("\n") {
        let tokens: Vec<&str> = line.split_whitespace().collect();

        if !tokens.is_empty() { // necessary because of contents.split("\n")
           let word_list = read_dictionary(tokens[0].len());
           println!("{}", tokens[0].len());
        }
    }
}