0

如何将此代码中的字符转换为字符串?InfixToPostfix 必须能够接受字符串而不是字符,因此它可以接受两位数和空格。有什么建议么?提前致谢。

import java.util.Stack;

public class InfixToPostfix
{
private Stack operators = new Stack();

public InfixToPostfix()
{

}

public String toPostfix(String infix)
{
    char[] characters = new char[100];
    int i;
    int length = infix.length();
    infix.getChars(0, length, characters, 0);
    char operator;
    String output = "";

    for (i = 0; i < length; i++)
    {
        if (isOperator(characters[i]))
            if (operators.empty())

                operators.push(characters[i]);
            else
            {
                if (operatorLessPrecedence(characters[i]))

                {
                    do
                    {
                        output = output + operators.pop();
                    }
                    while (!operators.empty() && operatorLessPrecedence(characters[i]));
                    operators.push(characters[i]);
                }
                else

                    operators.push(characters[i]);
            }
        else

            output = output + characters[i];
    }
    while (!operators.empty())
    {

        operator = (char)operators.pop();
        output = output + operator;
    }
    return output;
}

/**
 * operator
 */

public boolean isOperator(char c)
{
    if ( c == '*' ||
         c == '/' ||
         c == '+' ||
         c == '^' ||
         c == '-')
        return true;
    else
        return false;
}


public boolean operatorLessPrecedence(char o)
{
    int operatorPrecedence = precedence(o);
    int tosPrecedence = precedence((char)operators.peek());
    return (operatorPrecedence <= tosPrecedence);
}

/**
 * precedence
 */
public int precedence(char o)
{
    switch (o)
    {
        case '+': return 1;
        case '-': return 1;
        case '*': return 2;
        case '/': return 2;
        case '^': return 3;
    }
    return 5;
}

}

4

1 回答 1

0

我会在词法分析阶段将代码分成两部分,将输入分成一组标记。然后将它们传递给使用令牌数组的调车场算法。在词法分析阶段,您可以使用正则表达式来检测不同类型的输入。说 /\d+/ 检测一个或多个数字的序列。

于 2015-10-19T20:56:52.650 回答