Для моего проекта структур данных цель состоит в том, чтобы читать в предоставленном файле, содержащем более 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 блоки между полями Artist, Title и Lyrics, и по его предложению я изменил на последовательные операторы if. Хотя я могу видеть его точку зрения, используя этот пример кода, как я могу быть более защищенным, чтобы допускать несоответствия ввода?
Это открытый вопрос для того, чтобы сделать ваш код «лучше». Подумайте о том, чтобы сделать его Wiki сообщества? – pascal