[RESOLVIDO]Passar String para int sem Integer.parseInt

13 respostas
G

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.

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;
	}

13 Respostas

G

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

drsmachado

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

fredericomaia10

Eu também fiquei curioso.

Ruttmann

THIS.

G

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

G
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);

}

Ta aí pessoal.

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?

G

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?

É 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.

drsmachado

GabbiRold:
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?

É 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.


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.

Ataxexe

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

gomesrod
GabbiRold:
É uma atividade de aula onde devo criar minha própria API e nesse caso eu não poderia usar o Integer.parseInt()
Resposta do Joãozinho:
/**
* Converte de string para int sem usar Integer.parseInt()
*/
public static int  strToIntSpaceLetters(String s){
     long valor = Long.parseLong(s);
     return (int)valor;
}
Rodrigo_Sasaki
Que tal assim?
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+", "");
	}
	
}
Ataxexe
Rodrigo Sasaki:
Que tal assim?
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+", "");
	}
	
}

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

Criado 15 de setembro de 2013
Ultima resposta 17 de set. de 2013
Respostas 13
Participantes 7