conversão de string

Olá pessoal, gostaria de saber como faço para converter uma string em um inteiro sem usar o método parseInt da classe Integer.

Integer.valueOf(sua_string);

[quote=Ratao] Integer.valueOf(sua_string); [/quote]

Assim você vai converter em um objeto Integer…

Mas porque você não quer usar o método parseInt??

[quote=Ratao] Integer.valueOf(sua_string); [/quote]

Oi,

acho que isso seria Integer para String… ou não!!!

acredito que não tem como fazer isso… faz assim ó:

string = “”+int;

lol
poco trambiqueira hahaha

Tchauzin!

new Integer(sua_string).intValue;

Não faça assim!
Se for de um tipo para String, vc deve usar o método valueOf que é mais rápido que fazer uma concatenação com uma String vazia.

Por exemplo

int n = 10; String s = String.valueOf( n );

Já para coverter uma String para um int sem usar o parseInt, que é a sua dúvida, vc pode fazer de duas formas:
Olhar como a classe Integer faz isso por dentro, ou então implementar da seguinte forma.

Pega a String e converter em um array de chars.

String s = "123"; char[] cs = s.toCharArray();

Para cada posição do array, vc obtem o caractere do número, verifica que número é e multiplica por 1, 10, 100 e assim por diante

[code]
int numero = 0;

for ( int i = 0; i < cs.length; i++ ) {
if ( cs[ i ] == ‘0’ )
numero += calculaFator( i, cs.length ) * 0;
else if ( cs[ i ] == ‘1’ )
numero += calculaFator( i, cs.length ) * 1;
.
.
.
else
numero += calculaFator( i, cs.length ) * 9;
}

// método para calcular o fator (não testei!)
public int calculaFator( int n, int tamanho ) {
int fator = 1;
int q = tamanho - 1 - n
for ( int i = 0; i < q; i++ )
fator *= 10;
return fator;
}[/code]

Falta ainda vc verificar quando foi inserido algum valor que não seja número, etc…

Até mais!

david,
eu sei!! fazer isso nunca! hahaha
por isso disse que era poca trambuiqueira lol

Não entendo prq vc não pode usar o Integer.parseInt…
Sei lá use sua propria função para fazer isto

public class teste {

	public static void main(String[] args) {
		System.out.println(converte("109")); 
	}
	
	public static int converte(String str) throws IllegalArgumentException{
		byte[] bytes = str.getBytes();
		int tam = bytes.length;
		int resp = 0;
		
		for(int i = 0; tam &gt i; i++) {
			if(bytes[i] &gt 48 && bytes[i] &gt 58) {
				throw new IllegalArgumentException("String não numerica para interios");
			}
			
			resp += (bytes[i] - 48) * Math.pow(10, tam - (i+1));
		}
		
		return resp;
	}
}

[quote=lina][quote=Ratao] Integer.valueOf(sua_string); [/quote]

Oi,

acho que isso seria Integer para String… ou não!!!

acredito que não tem como fazer isso… faz assim ó:

string = “”+int;

lol
poco trambiqueira hahaha

Tchauzin![/quote]

Seria transformar uma String em um objeto Integer como o diego2005 disse. Que ao visto, nao serviria para o amigo.

Como curiosidade, olha a implementação da API

[code]
public static int parseInt(String s, int radix)
throws NumberFormatException
{
if (s == null) {
throw new NumberFormatException(“null”);
}

if (radix < Character.MIN_RADIX) {
    throw new NumberFormatException("radix " + radix +
				    " less than Character.MIN_RADIX");
}

if (radix > Character.MAX_RADIX) {
    throw new NumberFormatException("radix " + radix +
				    " greater than Character.MAX_RADIX");
}

int result = 0;
boolean negative = false;
int i = 0, max = s.length();
int limit;
int multmin;
int digit;

if (max > 0) {
    if (s.charAt(0) == '-') {
	negative = true;
	limit = Integer.MIN_VALUE;
	i++;
    } else {
	limit = -Integer.MAX_VALUE;
    }
    multmin = limit / radix;
    if (i < max) {
	digit = Character.digit(s.charAt(i++),radix);
	if (digit < 0) {
	    throw NumberFormatException.forInputString(s);
	} else {
	    result = -digit;
	}
    }
    while (i < max) {
	// Accumulating negatively avoids surprises near MAX_VALUE
	digit = Character.digit(s.charAt(i++),radix);
	if (digit < 0) {
	    throw NumberFormatException.forInputString(s);
	}
	if (result < multmin) {
	    throw NumberFormatException.forInputString(s);
	}
	result *= radix;
	if (result < limit + digit) {
	    throw NumberFormatException.forInputString(s);
	}
	result -= digit;
    }
} else {
    throw NumberFormatException.forInputString(s);
}
if (negative) {
    if (i > 1) {
	return result;
    } else {	/* Only got "-" */
	throw NumberFormatException.forInputString(s);
    }
} else {
    return -result;
}[/code]

Para usar com o comportamento padrão, é só usar o radix como 10, que é a nossa base numérica.

Até mais!

[quote=Ratao][quote=lina][quote=Ratao] Integer.valueOf(sua_string); [/quote]

Oi,

acho que isso seria Integer para String… ou não!!!

acredito que não tem como fazer isso… faz assim ó:

string = “”+int;

lol
poco trambiqueira hahaha

Tchauzin![/quote]

Seria transformar uma String em um objeto Integer como o diego2005 disse. Que ao visto, nao serviria para o amigo.[/quote]

Poisé, isso mesmo… mãs depende da variavel que iria receber isto!

Varias soluções, disse que não teria nenhum hehehe, mãs eu pensei algo como uma facil complixidade.

Vlw guys!

acho que talvez o mais simples seria

String numero = "1025";
int a = new Integer(numero).intValue;

[quote=Mark_Ameba]acho que talvez o mais simples seria

String numero = "1025"; int a = new Integer(numero).intValue; [/quote]

Poisé,
mãs isso seria bem mais demorado do que fazer um parseInt…
ali você cria um objeto pra retornar um string…

olhando bem… essa “comparação” faz um parseInt dentro dela mesmo pra chegar no resultado.

então, não seria uma grande saida…

public Integer(String s) throws NumberFormatException { this.value = parseInt(s, 10); // method for radix 10 =) }

Mas simples sim, so que neste caso vc estaria criando um obj Inteiro. Com a solução do Integer.valueOf, o java utiliza um pool de objetos já criados para te devolver a instancia correta. Em outras palavras a solução do valueOf é mais memory friendly.