为什么在按行然后按单词拆分文件时得到一个空向量?
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());
}
}
}
我正在尝试使用 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());
}
}
}