Non puoi cercare i successivi campi semplicemente ripetendo l'istruzione e variando solo il primo parametro del metodo substring().
In questo modo, infatti, gli indici vanno fuori limite:
codice:
String riga = "Titolo:Concetti di informatica\Autore:Horstmann\Casa editrice:Apogeo\ Codice ISBN:9346364\"
String campo1 = "Titolo:";
String campo1 = "Autore:";
String titolo=riga.substring(riga.indexOf(campo1) + campo1.length(), riga.indexOf(separator));
// L'esecuzione di questa istruzione avviene così:
titolo = riga.substring(7, 30) // Ed estrae correttamente "Concetti di informatica"
String autore=riga.substring(riga.indexOf(campo2) + campo2.length(), riga.indexOf(separator));
// L'esecuzione di questa istruzione avviene così:
autore = riga.substring(38, 30) // E qui non va più bene!!
Questo accade perchè il metodo indexOf() calcolato con parametro "separator" restituirà sempre la prima posizione che trova per quel valore (che nel caso dell'esempio è sempre 30).
Devi essere tu a guidare il metodo indexOf() in modo che parta a cercare dal punto che ti interessa.
Dovrai, quindi, modificare in questo modo le chiamate:
codice:
String cosaCercare=riga.substring(riga.indexOf(campo) + campo.length(), riga.indexOf(separator, indexOf(campo)));
Ciao.