String [Conversao]

eu gostaria de converter uma expressao matematica do tipo = (12 + 1)
eu crio a string com essa expressao, mas quero mandar ela neste formato para um array de char…
tipo char[0] = ‘(’ ;
char[1]= ‘12’ ;
char[2]= ‘+’ ;
char[3]= ‘1’;
char[4]= ‘)’;

teria algum jeito?

grato.

Isso aí é uma necessidade que surgiu na aula de linguagens formais ou compiladores?
Se for… melhor estudar o material que seu professor sugeriu, em especial na parte de análise léxica e sintática.

Se não for, dê uma olhada em APIs prontas para isso, como o AntLR, ou alguma que avalie a expressão diretamente.

vinni godoy…

é porque eu preciso criar um programa em java que faça conversao de uma expressao pos-fixada para infixada e vice-versa.
o problema que e aula de estrtura de dados entao preciso usar uma TAD pilha para fazer a conversao.
essa TAD pilha foi implementada por mim.
mas nao to conseguindo passar a expresao de maneira que teria como eu manipular ela na pilha. entendeu?

Basta acumular o número, até que você encontre um símbolo.

Veja se o algoritmo abaixo ajuda:

String numero = "" para cada caracter na string inicio Se for um número Numero = numero + simbolo; Senão Se for um símbolo matemático inicio Processe o simbolo com a pilha Armazene de alguma forma o numero Numero = "" fim fim

[code]public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String exp2;
System.out.println(“Informe a expressao:”);
String entrada = in.readLine();

	exp2 = removeSpaces(entrada);
	
	System.out.println(exp2);

}

public static String removeSpaces(String s) {  
	  StringTokenizer st = new StringTokenizer(s," ",false);  
	  String t="";  
	  while (st.hasMoreElements()) t += st.nextElement();  
	  return t;  
}[/code]

retiro os espaços. depois teria como eu percorrer a string?
o problema e que pra expressao infixada funciona aquilo que vc disse, mas se ele informar uma do tipo pos-fixada ja nao funcionaria. esse e o grande problema.

Oi.

Primeiro de tudo. Se você ler o javadoc da StringTokenizer, vai ver que a própria classe diz que não deve ser mais usada, e que você deve usar split no lugar.

Mas vai aí um código que faz o que você precisa:

[code]
import java.util.ArrayList;
import java.util.List;

public class Teste {
public static String[] parseExpression(String expression) {
List parsed = new ArrayList();

    StringBuilder number = new StringBuilder("");
    for (char ch : expression.toCharArray()) {
        //Se for um número, acumula os caracteres numa String.
        if (Character.isDigit(ch) || ch == '.') {
            number.append(ch);
            continue;
        }

        //Se não for um número, então adiciona o número acumulado na String
        if (number.length() > 0) {
            parsed.add(number.toString());
            number = new StringBuilder("");
        }

        //Se for um espaço ou tab, não considera como operação matemática
        if (ch == ' ' || ch == '\t') {
            continue;
        }

        //Outros símbolos, considere como operação matemática.
        parsed.add(Character.toString(ch));
    }

    //Como acima os números só foram adicionados quando símbolos foram encontrados
    //Precisamos testar se não sobrou um último número sem um simbolo após ele.
    if (number.length() >= 0) {
        parsed.add(number.toString());
    }

    //Retorna os valores acumulados, na forma de um array de Strings.
    return parsed.toArray(new String[parsed.size()]);
}

public static void main(String[] args) {
    System.out.println("Infixa");
    for (String str : parseExpression("(12 + 4) * 15.45")) {
        System.out.println(str);
    }

    System.out.println("Posfixa");
    for (String str : parseExpression("12 4 5.34 + -")) {
        System.out.println(str);
    }

}

}[/code]

muito obrigado …
desculpa por ser tao iniciante…
e quanto a API nao domino muito o ingles nao…

grato!

[quote=rsom91]muito obrigado …
desculpa por ser tao iniciante…
e quanto a API nao domino muito o ingles nao…[/quote]

Não precisa pedir desculpa. Só não peça para eu entregar também o conversor. Esse trabalho é seu (eu já fiz um desse em 1997, pra escola).
E, quando terminar e tiver funcionando, volta aqui no tópico e posta a solução. :slight_smile:

nem pensar o conversor ja tenho o algoritmo desenhado…agora so programar, o que estou fazendo agora.
depois posto sim…mas o codigo? ou o .jar?