Converter String para inteiro sem Integer.parseInt
21 respostas
henry.everton
Seguinte
Tenho um exercicio aqui q me pediram pra montar… meio q um desafio q me deram… tentar converter uma string para inteiro sem utilizar nenhuma função da API JAVA.
Ja tentei de tudo … mas de tudo mesmo… até o casting nao vai…
Alguem por acaso sabe se tem como fazer? o q eu poderia ultilizar pra efetuar esta conversao.
transferencia de bits!! provavelment… porem nao sei nada sobre isso!!!
T
Titosca
mas a string representa um numero ou é uma frase ou mesclado de tudo ?
Tem um metodo na Classe String que transforma objeto String num array de char não é ??
e char geralmente tem um valor inteiro lá de acordo com a tabela unicode!
neohacker
Gambiarra!!!
tenho uma idéia doida ahuaha…
Analiza ela caracter por caracter e verifica se é digito (0-9) e então atribui a uma variável int por exemplo
Boa Sorte 8)
bcartaxo
Kra nunc aparei pra pensar como faria n. Mas com certeza cast não daria certo =PP
Tenta pegando cada caractere da String (char) usando o método charAt, o algoritmo como disse nunca pensei, mas de antemão te digo q char são convertidos para int sem a necessidade de cast explicitos, afinal de contas char são números em última instancância, a unica diferça é q cada caractere é mapeado com um valor na tabela ASCII ou UNICODE. Acho q puraí vai.
T
Tecnoage
Stringstring="OrlandoClinioPatriarcha";for(inti=0; i < string.length(); i++){intcode=string.codePointAt(i);System.out.print(code);}
era isso?
henry.everton
naonao… é pegar tipo
digite os numeros
123456
isso em string e escreve-los em inteiro
o valor inteiro é
123456
isso sem usar nenhum metodo de conversao do JAVA
lina
Oi,
não tem como realizar isso… nem com transferencia de bits…
segue o exemplo abaixo:
int 1 Dec
0001 Bin (no caso, seria mais oito zeros na frente)
Char 1 Char
00110001 Bin (0011 seria o valor 3)
Então… um cacatcter é muito mais do que um inteiro… ele teria um valor 3…
sem API acho que não rola…
Tchauzin!
erickcellani
em resumo… vc tem que criar o seu proprio metodo de conversão ??? é isso???
henry.everton
exatamente... eu até tentei isso aqui embaixo mas nao deu certo... ele compila e da um monte de caracer estranho nada a ver com o q eu pedi.
Mas to tentando aqui
importjavax.swing.JOptionPane;publicclassConversao{publicstaticvoidmain(Stringargs[]){Stringrec;intcont=0;intvet[];rec=JOptionPane.showInputDialog(null,"Digite somente numeros para efetuar a conversão sem a utilização das funções JAVA","Conversão sem Funcões Java",JOptionPane.QUESTION_MESSAGE);vet=newint[rec.length()];for(cont=0;cont<rec.length();cont++){intinteiro=rec.charAt(cont);vet[cont]=inteiro;}JOptionPane.showMessageDialog(null,"o valor inteiro é: "+vet);}}
ViniGodoy
Que tal assim?
String numero = "1234";
//Pega o valor de cada caracter ascii da string num vetor
byte[] numeros = numero.getBytes();
int total = 0;
for (byte b : numeros) {
int valor = b - 0x30; //Reduz o valor ascii do 0 (48 em decimal)
total = total * 10 + valor;
}
System.out.println(total);
Se nem o getBytes() for permitido, você ainda pode obter o valor por uma comparação e uma série de ifs ou como o switch do post abaixo...
esse é o codigo mais horrivel que eu ja vi!!.. hahaha… motivo de piada!!.. mas ta ai! hahaha
perolas do GUJ!
hehehe eu tinha pensado assim tb…
marciosantri
Tá na mão.
Fiz poucos testes mas acho q está blz.
Tá bem comentado (até de mais).
Acho que dá pra entender.
Boa tarde pra vcs.
publicclassExemplo{publicstaticinttoInt(Strings){// Iniciando retornointretorno=0;// Loop do último para o primeiro caracterefor(inti=s.length()-1;i>=0;i--){// Pegando o código ASCIIintvlr=s.charAt(i);// Se não for número, retornando zeroif(vlr<48||vlr>57)return0;// Retirando 48 pois '0' = 48, '1' = 49, '2' = 50, etcvlr-=48;// Definindo a casa onde o nr irá ficar (dezena, milhar, etc)for(intj=1;j<(s.length()-i);j++)vlr=vlr*10;// Somando ao resultadoretorno=retorno+vlr;}// Tudo pronto! Agora é só correr por abraçoreturnretorno;}publicstaticvoidmain(String[]args){// Montando stringStringnr_str="159967";// Convertendointnr_int=toInt(nr_str);// Imprimindo o resultado, já numéricoSystem.out.println(nr_int);}}
Acho que a única coisa que você pode usar é “charAt”.
Dica:
O valor do caracter ‘0’, em Unicode, é 0x0030 (48 em decimal), ou então ‘0’.
Para obter o valor decimal de um dígito, basta então subtrair ‘0’. Esquisito, não?
Além disso, para converter para decimal, vá da esquerda para a direita, pegue o valor de cada dígito, e vá multiplicando os resultados anteriores por 10. Exemplo:
String s = “3141” int valordonumero = 0
caracter na posição 0 = ‘3’
valordocaracter = 3
então faça valordonumero = valordonumero * 10 + valordocaracter. Isso dá 3.
caracter na posição 1 = ‘1’
valordocaracter = 1
então faça valordonumero = valordonumero * 10 + valordocaracter. Isso dá 3 * 10 + 1 = 31.
Faça isso até acabar a string. OK?
ViniGodoy
marciosantri:
Tá na mão.
Fiz poucos testes mas acho q está blz.
// Definindo a casa onde o nr irá ficar (dezena, milhar, etc)for(intj=1;j<(s.length()-i);j++)vlr=vlr*10;</blockquote>
Note que a casa também poderia ser definida assim:
vlr=vlr*Math.pow(10,i);
O conhecimento dessa fórmula é muito importante se você quiser trabalhar com outras bases numéricas.
marciosantri
ViniGodoy:
marciosantri:
Tá na mão.
Fiz poucos testes mas acho q está blz.
// Definindo a casa onde o nr irá ficar (dezena, milhar, etc)for(intj=1;j<(s.length()-i);j++)vlr=vlr*10;</blockquote>
Note que a casa também poderia ser definida assim:
vlr=vlr*Math.pow(10,i);
O conhecimento dessa fórmula é muito importante se você quiser trabalhar com outras bases numéricas.
Verdade, Vinícius. Mas a intenção era simplificar o máximo possível o entendimento. Seu exemplo é de longe o mais prático.
rissato
ah cara… conversão peso posicional tipo:
123456
o caracter 1 está na posicao 6 (de tras pra frente)
ai vc faz:
num += 110^6
num += 210^5
num += 3*10^4
…
entendeu?
F
fsaraiva
Se a única limitação é não utilizar o “parseInt”, que tal assim: