Você pode atribuir um char para um int diretamente. Isso retornará o código ascii do caractere em questão. Como na tabela ascii os números estão em sequência e o zero equivale ao valor 0x30, basta fazer a conversão e subtrair esse valor do resultado:
public void numero_pilha (String valor) {
for(int i = 0; i < valor.length(); i++) {
this.empilha(valor.charAt(i)-0x30);
}
}
Todo número em java (ou C/C++) começado por 0x está em hexadecimal. Ou seja, subtrair 0x30 equivale a subtrair 48. É o que faço no código ali em cima.
int x = suaString.charAt(i) - 0x30;
int y = 0xA;
Isso é equivalente a:
int x = suaString.charAt(i) - 48;
int y = 10;
Outra coisa, todo número literal começado em 0 está em octal. Por isso é impossível fazer:
int x = 09;
Já que no octal, o maior dígito é 8. Isso pode gerar problemas difíceis de corrigir. Por exemplo:
int y[] = {100,
200,
300,
075,
050};
Aqui o programador quis deixar os dois últimos números bonitinhos. Mas com o 0 a esquerda, 080 e 050 são números octais. Então, na verdade ele atribuiu 61 e 40 aos dois últimos números!