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
fiz isso
Object [] e = txt.split(" "); //Achei que fosse object conseguiria fazer a comparação
for(int i = 0; i < e.length; i++){
if(e[i] instanceof Integer){
pilhaInt.push((int)e[i]);
}
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 é para checar se há um número dentro da String e ( + ) é para checar se ocorre uma ou mais repetições
System.out.println(s + " é um numero");
// adiciona "s" na pilha de nú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.
Deu td certo, muito obrigado, o método ficou assim dps de pronto
public void addListas(String txt) {
String[] e = txt.split(" ");
pilhaInt = new StaticStack<Integer>(e.length);
pilhaChar = new StaticStack<Character>(e.length);
pilhaString = new StaticStack<String>(e.length);
pilhaNomes = new StaticStack<String>(e.length);
for (int i = 0; i < e.length; i++) {
if (e[i].matches("\\d+")) {
pilhaInt.push(Integer.parseInt(e[i]));
} else {
if (e[i].length() == 1) {
char [] aux = new char [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 inteiros
aux = 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
}
}
}
}
}