对于我的数据结构项目,目标是读取包含超过 10000 首歌曲的提供的文件,其中清楚地标记了艺术家、标题和歌词,并且每首歌曲都用单双引号分隔。我编写了这段代码来解析文本文件,它可以运行,运行时间不到 3 秒,可以
读取 422K 行文本
创建一个 Song 对象
,将所述 Song 添加到 ArrayList
我写的解析代码是:
if (songSource.canRead()) { //checks to see if file is valid to read
readIn= new Scanner(songSource);
while (readIn.hasNextLine()) {
do {
readToken= readIn.nextLine();
if (readToken.startsWith("ARTIST=\"")) {
artist= readToken.split("\"")[1];
}
if (readToken.startsWith("TITLE=\"")) {
title= readToken.split("\"")[1];
}
if (readToken.startsWith("LYRICS=\"")) {
lyrics= readToken.split("\"")[1];
} else {
lyrics+= "\n"+readToken;
}//end individual song if block
} while (!readToken.startsWith("\"")); //end inner while loop
songList.add(new Song(artist, title, lyrics));
}//end while not EOF
} //end if file can be read
我正在和我的 Intro to Algorithms 教授讨论这个项目的代码,他说我应该尽量在我的代码中更加防御,以允许其他人提供的数据不一致。最初我在 Artist、Title 和 Lyrics 字段之间使用 if/else 块,根据他的建议,我改为使用顺序 if 语句。虽然我可以理解他的观点,但使用此代码示例,我怎样才能更加防御允许输入不一致?