[RESOLVIDO]Passar String para int sem Integer.parseInt

E aí pessoal, tô precisando de uma ajuda. Tenho que desenvolver minha própria API e há um caso que tenho que transformar string para int sem usar o Integer.parseInt, exemplo: "12" == 12 ou "abc12" == 12.
Tô tentando aqui mas não consigo pensar em muita coisa sem usar o Integer.parseInt :c E ah, vou mostrar como estou fazendo… Alguma ideia? Obrigada.

[code]public static int strToIntSpace(String s){
int inicio = -1, fim = 0, n = 0, x = 0;
String num = "";
char [] chars = s.toCharArray();

	for (int i = 0; i < chars.length; i++ ){
		if (chars[i] != ASCII_SPACE) {
			if (inicio == -1) {
				inicio = i;
			}
		fim = i;
		}			
	}
	
	for (int i = inicio; i <= fim; i++ ){
		num += chars[i];							
	}		

	n = Integer.parseInt(num);
	return n;
}[/code]

Bom pessoal, já consegui resolver esse problema depois de um bom tempinho.

Fiquei curioso para saber qual foi a solução aplicada.

Eu também fiquei curioso.

THIS.

Agora tava revisando, há um pequeno probleminha, vou testar e mostrar aqui depois.

[code]private static final int ASCII_NUMBER_BEGIN = 48;
private static final int ASCII_NUMBER_FINAL = 57;
private static final int ASCII_SPACE = 32;
private static final int ASCII_LOW_START_INDEX = 97;
private static final int ASCII_LOW_END_INDEX = 122;

public static int strToIntSpaceLetters(String s){
int inicio = -1, fim = 0, numero = 0, ctd = 0, t = 0;
char[] chars ={’’, ‘1’, ‘2’, ‘3’, ‘a’, ‘b’, ‘c’};

    //entra " 123abc" e tem que sair 123
    for (int i = 0; i < chars.length; i++) {
        if (chars[i] != ASCII_SPACE && chars[i] >= ASCII_NUMBER_BEGIN
                && chars[i] <= ASCII_NUMBER_FINAL) {
            if (inicio == -1) {
                inicio = i;
            }
            fim = i;
        }
    }
  
    char c[] = new char[(fim - inicio) +1];

    for (int i = 0; i < chars.length; i++) {
        if (chars[i] >= ASCII_NUMBER_BEGIN
                && chars[i] <= ASCII_NUMBER_FINAL) {
            c[t] = chars[i];
            t++;
        }
    }
    int aux = c.length - 1;

    for (int i = 0; i < c.length - 1; i++) {
        numero += (c[i] - 48) * (Math.pow(10, aux));
        aux--;
    }

    numero += c[c.length - 1] - 48;
   System.out.println(numero);

}[/code]

Ta aí pessoal.

Como diria o Cebolinha: “Calálio, Cascão!”

Por que raios você não poderia usar o Integer.parseInt ? Quer reescrever a API do Java?

[quote=Ataxexe]Como diria o Cebolinha: “Calálio, Cascão!”

Por que raios você não poderia usar o Integer.parseInt ? Quer reescrever a API do Java?[/quote]

É uma atividade de aula onde devo criar minha própria API e nesse caso eu não poderia usar o Integer.parseInt(). Foi um desafio e tanto rs.

[quote=GabbiRold][quote=Ataxexe]Como diria o Cebolinha: “Calálio, Cascão!”

Por que raios você não poderia usar o Integer.parseInt ? Quer reescrever a API do Java?[/quote]

É uma atividade de aula onde devo criar minha própria API e nesse caso eu não poderia usar o Integer.parseInt(). Foi um desafio e tanto rs.[/quote]
Desafio? Isso é uma afronta… Claro que existem situações em que o uso de partes da API serão substituídos por coisas assim, mas isso é um exercício e tanto.
Obrigado por compartilhar a respostas.

Ufa, menos mal. Mas foi um baita exercício ein.

Resposta do Joãozinho:

[code]/**

  • Converte de string para int sem usar Integer.parseInt()
    */
    public static int strToIntSpaceLetters(String s){
    long valor = Long.parseLong(s);
    return (int)valor;
    }[/code]

Que tal assim? [code]public class Teste {

private static final int NUMBER_OFFSET = 48;

public static void main(String[] args) {
	int n = toInt("123AbC44");
	System.out.println(n);
}

private static int toInt(String str) {
	str = removeNonNumbers(str);
	
	int result = 0;
	char[] chars = str.toCharArray();
	int multiplier = chars.length - 1;
	
	for(char c : chars){
		result += (((int)c) - NUMBER_OFFSET) * Math.pow(10, multiplier);
		multiplier--;
	}
	
	return result;
}

private static String removeNonNumbers(String str) {
	return str.replaceAll("\\D+", "");
}

}[/code]

[quote=Rodrigo Sasaki]Que tal assim? [code]public class Teste {

private static final int NUMBER_OFFSET = 48;

public static void main(String[] args) {
	int n = toInt("123AbC44");
	System.out.println(n);
}

private static int toInt(String str) {
	str = removeNonNumbers(str);
	
	int result = 0;
	char[] chars = str.toCharArray();
	int multiplier = chars.length - 1;
	
	for(char c : chars){
		result += (((int)c) - NUMBER_OFFSET) * Math.pow(10, multiplier);
		multiplier--;
	}
	
	return result;
}

private static String removeNonNumbers(String str) {
	return str.replaceAll("\\D+", "");
}

}[/code][/quote]

Bem mais simples mesmo. A implementação do Java segue essa linha.