gpt4 book ai didi

java - 这段代码还能如何针对防御性编程进行优化?

转载 作者:行者123 更新时间:2023-12-01 06:59:13 25 4
gpt4 key购买 nike

对于我的数据结构项目,目标是读取提供的包含超过 10000 首歌曲的文件,其中明确标记了艺术家、标题和歌词,并且每首歌曲均由带有单双引号的行分隔。我编写了这段代码来解析文本文件,并且它可以工作,运行时间不到 3 秒即可
读取 422K 行文本
创建一个 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

我正在与我的算法简介教授讨论该项目的代码,他表示我应该尝试在代码中采取更多的防御措施,以允许其他人提供的数据不一致。最初,我在艺术家、标题和歌词字段之间使用 if/else block ,根据他的建议,我更改为顺序 if 语句。虽然我可以理解他的观点,但使用此代码示例,我如何才能更加防御性地允许输入不一致?

最佳答案

我会替换例如:

artist= readToken.split("\"")[1];

String[] parts = readToken.split("\"");
if(parts.length >= 2) artist = parts[1];
else continue;

其他修改包括:

  1. 重置局部变量(这样,如果在第一首歌曲之后没有为某首歌曲提供艺术家,您就不会意外地得到错误的艺术家)
  2. 决定如果某些数据丢失该怎么办 - 您是否仍想将歌曲添加到歌曲列表中?

关于java - 这段代码还能如何针对防御性编程进行优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com