Quero criar um método que irá ler uma String composta por números, caracters(. + - / *), espaços e palavras, Ex: 10 5 81 7 + * dup . preciso diferenciar o que é int, char e String e colocar em suas respectivas pilhas(tem uma pra cada tipo, não posso por td em uma genérica) o espaço é o separador. Meu problema é que não to conseguindo extrair os elementos da String estava usando o charAt, porém ele pega 1 a 1 se eu tenho, por exemplo, o número 81 ele irá pegar o 8 e colocar na pilha e dps o 1 separadamente. Existe alguma maneira de pegar o 81 completo?
Espero que tenha conseguido expressar minha duvida.
Muito obrigado, ajudou bastante, porém ainda preciso percorrer esse vetor e verificar o que inteiro, string, char para distribuir nas pilhas.
Tentei pegar o elemento por posição e fazer o instanceof para comprar, mas não deu certo alguma sugestão, só falta essa parte para finalizar o trabalho =, o resto dos métodos estão todos ok
A única forma que eu consegui foi utilizando .matches(), para checar se a String contém número ou letras utilizando uma Expressão Regular, ficando mais ou menos assim :
if(s.matches("\\d+")){//\déparachecarseháumnúmerodentrodaStringe(+)éparachecarseocorreumaoumaisrepetiçõesSystem.out.println(s+" é um numero");//adiciona"s"napilhadenúmeros
}
Para não dar a resposta logo de cara, que não seria muito legal vou falar como é feito o resto, que é basicamente a mesma coisa, é só repetir esse mesmo if com “\w+” (para saber se há letras, uma ou mais repetições ) no lugar de “\d+”
e para saber se é um char, para não se confundir com o “\w+” eu usei “s.length() == 1” antes de checar se há letras. Nesse não usa matches, é só essa comparação mesmo.
S
Sandro_J1 like
Deu td certo, muito obrigado, o método ficou assim dps de pronto
publicvoidaddListas(Stringtxt){String[]e=txt.split(" ");pilhaInt=newStaticStack<Integer>(e.length);pilhaChar=newStaticStack<Character>(e.length);pilhaString=newStaticStack<String>(e.length);pilhaNomes=newStaticStack<String>(e.length);for(inti=0;i<e.length;i++){if(e[i].matches("\\d+")){pilhaInt.push(Integer.parseInt(e[i]));}else{if(e[i].length()==1){char[]aux=newchar[0];aux=e[i].toCharArray();pilhaChar.push(aux[0]);operacoesChar();//Faz a operação de acordo com o caracter, se for * multiplica o top com o subtop na pilha de inteirosaux=null;}else{if(e[i].matches("\\w+")){pilhaString.push(e[i]);operacoesString();//Faz a operação com a String, se for dup irá duplicar o top da pilha de inteiros}}}}}