使用带有附加java字符串的一元表示

时间:2013-04-19 20:36:31

标签: java addition unary-function

我需要编写一个代码,该代码接受一个字符串输入并将其转换为有效的一元等式,并验证它是否有效。我很困惑,有人能指出我理解这个方向吗? 一个例子是:  111+1111=11111+1+1是有效的语句3+4=5+1+1。 我的另一个问题是如何使用堆栈来进行一元操作。

2 个答案:

答案 0 :(得分:1)

如果您只使用这种语言,那么您可以使用多种方法编写一个简单的解析器。您可以先拆分您的字符串

String[] parts = eqn.split("=");

然后拆分每个部分:

String[] left = parts[0].split("\\+");
String[] right = parts[1].split("\\+");

现在你可以简单地计算字符串的长度:

int leftside = 0;
for (String l : left) {
    leftside += l.length;
}

依此类推右侧,看看它们是否相等。

还有很多其他方法可以解决这个问题。

基本上你必须写一个解析器。您可能希望使用逐个字符的扫描程序,或使用正则表达式或ANTLR等通用工具。这取决于您的最终目标以及是否可能发生变化。您是否可能拥有1,+,=以外的字符?

我的猜测是这是家庭作业。我想你应该逐个字符地读取并推送()堆栈中的每个字符。然后你必须在遇到某些条件时弹出()堆栈。我不打算为你做这个......

答案 1 :(得分:0)

另一种可能的解决方案。

String input = "111+1111=11111+1+1";
    String[] parts = input.split("=");

    Pattern pattern = Pattern.compile("1");
    Matcher  matcherLeft = pattern.matcher(parts[0]);
    Matcher matcherRight = pattern.matcher(parts[1]);
    int leftTotal = 0;
    while (matcherLeft.find())
        leftTotal++;

    int rightTotal = 0;
    while (matcherRight.find())
        rightTotal++;

    if(leftTotal == rightTotal)
        System.out.println("Valid");
    else
        System.out.println("Invalid");

通过将字符串拆分到方程的左侧和右侧来开始。然后简单地计算每个部分中的1的数量并进行比较。肯定有更好的方法可以做到这一点,但是通过这个例子可以很容易地看出发生了什么。