對於我的數據結構項目,目標是閱讀提供的文件,其中包含超過10000首帶有明確標記的藝術家,標題和歌詞的歌曲,並且每首歌曲用一行雙引號分隔。我寫這個代碼來解析文本文件,它的工作原理,用了不到3秒
運行時間 閱讀422K行文字
的創建宋對象
加說宋到一個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
我和我的介紹到算法教授關於這個項目的代碼說話,他說,我應該嘗試更多的防守在我的代碼允許其他人提供的數據不一致。最初我在Artist,Title和Lyrics字段之間使用了if/else塊,並且在他的建議中,我將其改爲順序if語句。雖然我可以看到他的觀點,但是使用這個代碼示例,我怎樣才能更加防禦地考慮輸入不一致?
這是一個讓你的代碼「更好」的開放性問題。考慮讓它成爲一個社區Wiki? – pascal 2010-09-21 02:17:23