Originariamente inviato da zipangulu
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
Fai finta che il file "CODICICATASTALI.txt" sia così composto (per semplificare la cosa):
codice:
catanzaro	c352
IMPORTANTE: sarebbe catanzaro+tab+c352
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.
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".