0

我正在尝试使用 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 上运行并使用 cargo run。我收到以下错误(因为tokens[0].len()):

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

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

4

2 回答 2

1

通过使用.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());
    }
}

也可以看看:

于 2020-10-14T14:44:04.317 回答
0
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());
        }
    }
}
于 2020-10-14T14:44:21.433 回答