[Resolvido] Conversoes String para char para int

Galera ,

preciso ler uma string numérica ( “123456789” ) e então empilhar cada caractere em uma pilha …

fiz o seguinte :

public void numero_pilha (String valor)
    {
        String parte="";
        
        for(int i=0;i<valor.length();i++)
        {
            parte = valor.valueOf(valor.charAt(i));
            this.empilha(Integer.parseInt(parte));
        }
    }

está funcionado … queria saber se existe algo que substitua as conversões que tive que fazer … direto do String para o integer

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 &lt valor.length(); i++) { this.empilha(valor.charAt(i)-0x30); } }

quando eu fiz isso :

int x = valor.charAt(i); this.empilha(x);

e passei esta string :
“1234567834333”

ao desempilhar os valores obtive :
49 50 51 52 53 54 55 56 51 52 51 51 51

acredito que os valores da tabela asc
alt + 49 = 1

Sim, tem que subtrair 0x30, que é o valor do 0.

???

subtrair 0x30 ???

???

:oops:

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!

Complementando, na tabela ASCII.

Representação | Hexa | Decimal
‘0’ = 0X30 = 48
‘1’ = 0X31 = 49
‘2’ = 0X32 = 50
‘3’ = 0X33 = 51
‘4’ = 0X34 = 52
‘5’ = 0X35 = 53
‘6’ = 0X36 = 54
‘7’ = 0X37 = 55
‘8’ = 0X38 = 56
‘9’ = 0X39 = 57

Valeu !
Muito agradecido pelas explicações e pela paciência !

:roll:

Tô fazendo aqui um exercício para somar números gigantes usando pilha e os números devem ser passados por uma String …
Ajudaram demais !