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.

21 Respostas

A

transferencia de bits!! provavelment… porem nao sei nada sobre isso!!!

T

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
String string = "OrlandoClinioPatriarcha";
      for( int i = 0; i < string.length(); i++){
          int code = 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

import javax.swing.JOptionPane;
public class Conversao{
	public static void main(String args[]){
		
		String rec;
		int cont=0;
		int vet[];
		
		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= new int[rec.length()];
		
			for(cont=0;cont<rec.length();cont++){
					
				int inteiro =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...

erickcellani

eu tenho até vergonha de mostrar… rsrs…

public static void main(String[] args) {
		String str = "6";
		int num = 0;
		char c = str.charAt(0);
		int j = (int) c;
		
		switch (j) {
			case 48: num = 0;
				break;
			case 49: num = 1;
			break;
			case 50: num = 2;
			break;
			case 51: num = 3;
			break;
			case 52: num = 4;
			break;
			case 53: num = 5;
			break;
			case 54: num = 6;
			break;
			case 55: num = 7;
			break;
			case 56: num = 8;
			break;
			case 57: num = 9;
			break;
		}
		System.out.print(num);
	}

esse é o codigo mais horrivel que eu ja vi!!.. hahaha… motivo de piada!!.. mas ta ai! hahaha

perolas do GUJ!

T

erickcellani:
eu tenho até vergonha de mostrar… rsrs…

public static void main(String[] args) {
		String str = "6";
		int num = 0;
		char c = str.charAt(0);
		int j = (int) c;
		
		switch (j) {
			case 48: num = 0;
				break;
			case 49: num = 1;
			break;
			case 50: num = 2;
			break;
			case 51: num = 3;
			break;
			case 52: num = 4;
			break;
			case 53: num = 5;
			break;
			case 54: num = 6;
			break;
			case 55: num = 7;
			break;
			case 56: num = 8;
			break;
			case 57: num = 9;
			break;
		}
		System.out.print(num);
	}

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.

public class Exemplo {
    
    public static int toInt(String s){
        // Iniciando retorno
        int retorno = 0;
        
        // Loop do último para o primeiro caractere
        for (int i = s.length() - 1; i >= 0; i--){
            // Pegando o código ASCII
            int vlr = s.charAt(i);
            
            // Se não for número, retornando zero
            if (vlr < 48 || vlr > 57)
                return 0;
            
            // Retirando 48 pois '0' = 48, '1' = 49, '2' = 50, etc
            vlr -= 48;
            
            // Definindo a casa onde o nr irá ficar (dezena, milhar, etc)
            for (int j = 1; j < (s.length() - i); j++)
                vlr = vlr * 10;
            
            // Somando ao resultado
            retorno = retorno + vlr;
        }
        
        // Tudo pronto! Agora é só correr por abraço
        return retorno;
    }
    
    public static void main(String[] args){
        // Montando string
        String nr_str = "159967";
        // Convertendo
        int nr_int = toInt(nr_str);
        
        // Imprimindo o resultado, já numérico
        System.out.println(nr_int);
    }
    
}
T
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.

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?
char caracter = '9';
int valor = caracter - '0';
System.out.println (valor); // imprime 9

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 (int j = 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 (int j = 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. :smiley:

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 += 2
10^5
num += 3*10^4

entendeu?

F

Se a única limitação é não utilizar o “parseInt”, que tal assim:

Integer i = new Integer("1234");
System.out.println(i);
int ii = i;
System.out.println(ii);

[]´s,

ViniGodoy

Eu percebi, teu exemplo ficou muito legal. E beeem mais didático.

cassio

Meio chuncho, mas não usa byte nem nada. só casting de char pra int. Acho que não está tão complicado de entender…

public int converter (String s) {
   int ret = 0;
   int limit = s.length() - 1;
   for(int i = 0; i &lt= limit; ++i){
      ret += (s.charAt(i) - 48) * Math.pow(10, limit-i);
   }
   return ret;
}
jamesfrj

Eu estava fazendo esse desafio hoje também. Meu código não ficou muito elegante mas funcionou. :D Usei a função Character.getNumericValue:

public class DesafioConverteString {
	public static void main(String[] args) {

		int numero = javaStrToInt("762");
		System.out.println(numero);
	}

	private static int javaStrToInt(String s) {
		int numero = 0;
		int potencia = s.length() - 1;
		for (int i = 0; i <= s.length() - 1; i++) {
			numero += (Character.getNumericValue(s.charAt(i)) * Math.pow(10,
					potencia - i));
		}
		return numero;
	}
}
Criado 10 de maio de 2007
Ultima resposta 30 de jan. de 2012
Respostas 21
Participantes 15