String 为什么在按行然后按字拆分文件时会得到一个空向量?
我试图读取一个带有锈迹的文本文件,其中每行有两个用空格分隔的单词。我必须得到第一个单词的长度:String 为什么在按行然后按字拆分文件时会得到一个空向量?,string,file,rust,vec,String,File,Rust,Vec,我试图读取一个带有锈迹的文本文件,其中每行有两个用空格分隔的单词。我必须得到第一个单词的长度: 使用std::fs; fn main(){ 让contents=fs::read_to_string(“src/input.txt”).expect(“错误的文件名!”); 用于内容中的行。拆分(“\n”){ let tokens:Vec=line.split_whitespace().collect(); println!(“{}”,标记[0].len()); } } input.txt文件的内容
使用std::fs;
fn main(){
让contents=fs::read_to_string(“src/input.txt”).expect(“错误的文件名!”);
用于内容中的行。拆分(“\n”){
let tokens:Vec=line.split_whitespace().collect();
println!(“{}”,标记[0].len());
}
}
input.txt文件的内容是:
monk perl
我在Windows上运行并使用cargo run。我收到以下错误(因为标记[0]。len()
):
4
线程“main”在“索引超出范围:len为0但索引为0”时惊慌失措
我不知道我的代码出了什么问题。文件“input.txt”不是空的。通过使用.split(“\n”)
,您将在迭代器中获得两项。一个是您期望的行,另一个是换行后的空字符串。空字符串在拆分为单词时为空。这意味着向量将为空,并且索引0处没有项
改用:
使用std::fs;
fn main(){
让contents=fs::read_to_string(“src/input.txt”).expect(“AWrong文件名!”);
对于目录中的行。行(){
let tokens:Vec=line.split_whitespace().collect();
println!(“{}”,标记[0].len());
}
}
另见:
使用std::fs;
fn main(){
让contents=fs::读取字符串(“text.txt”)。预期(“错误的文件名!”);
用于内容中的行。拆分(“\n”){
let tokens:Vec=line.split_whitespace().collect();
if!tokens.is_empty(){//由于contents.split(“\n”)而必需
让word_list=read_字典(标记[0].len());
println!(“{}”,标记[0].len());
}
}
}
@109149,这取决于他们保存文件的位置。如果它在src
中,那么它是必要的,是吗?@109149使用cargo run执行它将在src目录中查找-它不会。工作目录不是src
。您可以在本地进行试验,亲自查看。