Metodo pegar inteiros de uma string

5 respostas
Kleb1

Olá, sou iniciante java e estou fazendo um programa para resolver expressoes usando a forma pósfixa com pilha.
expressao infixa 3+46 expressao pos fixa 643+
Estava usando este metodo para pegar somente os numeros inteiro da String, o problema é q com ele n estou conseguindo realizar operações com numeros de mais de um digito. Tentei algumas implementações e n consegui.
Achei aqui no forum algumas, tentei usar aquela funcao string.split(" ") mas ela não pega somente numeros , e pelo q vi o isDigit() só aceita char.
tem alguma forma de verificar e pegar os numeros de uma string separados por (espaço)?

// metodo pegar inteiros(de um digito)

public boolean pegarInteiros( String s ) {
// cria um array de char
char[] c = s.toCharArray();
boolean d = true;
for ( int i = 0; i < c.length; i++ )
    // verifica se o char não é um dígito
    if ( !Character.isDigit( c[ i ] ) ) {
        d = false;
        break;
    } return d;
 }

// classe main

public class Teste {

public static void main(String[] args) {
    Pilha p = new Pilha();
    Scanner sc = new Scanner(System.in);
    String aa = null;
    String bb = null;
    System.out.println(" Digite a expressão pósfixa: ");
    aa = sc.nextLine();
    String[] arrayValores = aa.split(" ");
    System.out.println(" numeros interiros  a :"+ aa);

    for (String s: arrayValores) {
        System.out.println(s);
    }
    
    for (int i=0, j=0 , k=1 ; i<aa.length() ; i++,j++,k++ ){
    
    bb = aa.substring(j,k);
    if (p.pegarInteiros(bb)){
    int numero = Integer.parseInt(bb);
    p.push(numero);
    }

    switch( bb )  {
    
    case " ":
    System.out.println(" Espaço ");
    
    break;
    
    case "+":
    int soma;
    soma = ( p.pop() + p.pop() );
    System.out.println("Soma igual a "+soma);
    p.push(soma);
    break;
    
    case "-":
    int diferenca;
    diferenca = ( p.pop() - p.pop() );
    System.out.println("Subtração igual a "+diferenca);
    p.push(diferenca);
    break;
    
    case "/":
    int quociente;
    quociente = ( p.pop() / p.pop() );
    System.out.println("divisaõ igual a "+quociente);
    p.push(quociente);
    break;
    
    case "*":
    int produto;
    produto = ( p.pop() * p.pop() );
    System.out.println("multiplicação igual a "+produto);
    p.push(produto);
    break;
    
    }
    

    }
}
}

5 Respostas

X

Kleb1 Eu não sei se essa resposta vai te ajudar, mais você poderia fazer algo simples assim. Você cria um array:

char[] vetChar= { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' }

Ai você poderia da um charToarray e percorrer sua string comparando cada character com esse vetor de cima para saber se é um número.

rmendes08

Utilize expressões regulares:

Pattern p = Pattern.compile("\\s*(\\d+)\\s*");
Matcher m = p.matcher("23 + 1 * 4");
while(m.find()){
	int num = Integer.valueOf(m.group());
}
LincolnStuart

Como sugerido por @rmendes08, use expressões regulares… segue um exemplo simples:

/**
 *
 * @author Lincoln
 */
public class Teste {

    public static boolean ehNumero(String elemento){
        return elemento.matches("[0-9]+");
    }

    public static void main(String[] args) {
        String expressao = "16 4 * 3 +";
        String[] elementos = expressao.split(" ");
        for(String elemento : elementos){
            boolean teste = ehNumero(elemento);
            System.out.println(elemento + " é um número? R:" + teste);
        }
    }
}

saída:
16 é um número? R:true
4 é um número? R:true

  • é um número? R:false
    3 é um número? R:true
  • é um número? R:false
JulianoJFX

Você esta precisando trabalhar com números decimais pelo oque entendi! Portanto você poderia tentar converter o valor da String para Double! quando existir números decimais, faça uma função especifica para esse tratamento.

Desculpe se estou equivocado!

Kleb1

Valeeeu pessoal consegui resolver aqui usando essas expressões re gulares. Obrigado a todos.

Criado 9 de junho de 2016
Ultima resposta 9 de jun. de 2016
Respostas 5
Participantes 5