O método lenght do String retorna o tamanho da palavra.
Como os índices começam em zero, o primeiro caracter estará em charAt(0)., o segundo em charAt(1), etc.
Portando se você quiser a última letra, use charAt(tamanho -1), penúltima charAt(tamanho -2), e assim vai.
Como os desenvolvedores já pensaram que um monte de charAt seria meio chato, eles inventaram o método substring(começo, fim), onde começo e fim são os índices na String.
A diferença no substring é que você tem que ele vai pegar uma posição entre índices pra começar, essa posição é aquela anterior ao índice que você for passar. Desse jeito, se você quiser pegar o último índice, tem que passar tamanho, e não tamanho - 1.