私のデータ構造プロジェクトの目標は、アーティスト、タイトル、歌詞が明確にマークされた10000を超える曲を含む提供されたファイルを読み込むことであり、各曲は1つの二重引用符で囲まれた行で区切られています。このコードを記述してテキストファイルを解析しました。実行時間は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
私はこのプロジェクトのコードについてアルゴリズム入門教授と話していましたが、彼は、他の人から提供されたデータの不整合を許容するために、コードをより防御的にするように努めるべきだと述べました。もともと私はArtist、Title、Lyricsフィールドの間にif / elseブロックを使用していましたが、彼の提案により、シーケンシャルifステートメントに変更しました。このコード例を使用して彼の主張を理解することはできますが、入力の不整合を許容することについて、どうすればより防御的になることができますか?