Direi che ho capito il problema. Sei su Windows, dicevi, giusto? Sui Windows il newline è CR+LF e tu fai un replaceAll solo del line-feed.Originariamente inviato da zipangulu
Fai finta che il file "CODICICATASTALI.txt" sia così composto (per semplificare la cosa):codice:String s=read ("CODICICATASTALI.txt","UTF-8").replaceAll("\n","\t"); System.out.println(calcola ("rossi","antonio",25,05,1989,'m',"catanzaro")); //DOVREBBE ESSERE RSSNTN89E25C352T //MA INVECE STAMPA TSSNTN89E25C352
IMPORTANTE: sarebbe catanzaro+tab+c352codice:catanzaro c352
Quindi hai ancora in mezzo ai piedi il carriage-return che non elimini.
La "T" che dici che va all'inizio ... è perché nel file la riga di esempio finisce con c352<NEWLINE>
Avendo in mezzo ai piedi il carriage-return, alla fine arrivi ad avere (prima del toUpperCase che non centra/sballa nulla) la stringa:
rssntn89e25c352<CR>t
Quando poi stampi su console, il CR fa ritornare all'inizio (non su nuova linea!) e vedi la "t" (poi tutto in maiuscolo ovviamente) all'inizio al posto della "r".
Occhio a queste cose!
P.S. e come vedi il StringBuilder è "innocente".