Beh ma dal codice che hai postato sembri non avere per niente le idee chiare, non solo relativamente al problema di aggiungere tutti i tag successivi a nome, ma in generale sui fondamenti del linguaggio!
Andiamo passo a passo nel tuo codice, partendo dal punto in cui hai letto anno come token. Tu dici giustamente che finché ha dei tag li deve leggere e aggiungere a "tag". Poi inizi il ciclo con while(st.hasMoreTokens()).
Questo è il primo errore. Ti abbiamo detto entrambi che la lista va creata
prima del ciclo, mentre tu all'interno usi tag.add(...) senza aver prima creato l'arraylist tag, che crei successivamente. Ovviamente a quel punto del codice il programma non può sapere cosa sia tag!
Quindi sposta la riga :
ArrayList <String>tag=new ArrayList <String>();
prima di entrare nel while.
Secondo errore: dentro al while non ha alcun senso il for innestato che hai inserito. Il ciclo esterno sta già ciclando su ogni token, quindi basta aggiungere "rigaLetta" all'arraylist una volta, mentre tu lo stai facendo 4 volte.
Il for avrebbe senso di esistere se sapessi il numero di tokens da leggere (avendo prima utilizzato countTokens()), ma se usi quello
non hai bisogno di utilizzare anche il ciclo con st.hasMoreTokens(). Quindi o utilizzi uno, o utilizzi l'altro, per ora rimuovi semplicemente il for.
ArrayList <String>tag=new ArrayList <String>();
Utente temp=new Utente(nome,cognome,anno,tag);
//QUI MI DA ERRORE PERCHè NON RICONOSCE TAG COME ATTRIBUTO
Puoi sapere solo tu cosa si aspetta di ricevere il costruttore di utente. Se passi tre stringhe e un arraylist di stringhe come argomenti deve necessariamente esserci un costruttore definito in Utente come :
public Utente(String s1, String s2, String s3, ArrayList<String> list) {
//...
}
Ovviamente i nomi li scegli tu, ma i tipi
devono coincidere. Ma senza sapere questa cosa non vai assolutamente avanti!
Se con questi consigli non riesci ancora a sistemare il codice vuol dire che probabilmente l'esercizio è a un livello per ora troppo difficile, hai tutte le informazioni necessarie, scriverti direttamente il codice andrebbe
contro il tuo interesse!