Java递归表达式检查器

时间:2016-09-27 07:48:10

标签: java recursion

设计函数以输入字符串并输出' true'或者' false' - 告诉字符串是否是表达式。

打印一条消息,告诉该字符串是否是格式正确的表达式。最后,在处理完所有输入后,程序打印退出消息并停止。  以下规则定义了格式良好的表达式:

.expr> = S | I(C)T(.exp>)

这是我的代码:

import java.io.FileNotFoundException;
import java.util.*;
import java.util.Scanner;

public class RecursionExpression {


    public static void main(String[] args) throws FileNotFoundException{
        System.out.println("Enter the expression statement.");
        Scanner keyboard = new Scanner(System.in);
        String expr = keyboard.nextLine();
    }
    public static boolean expression(String n)
    {
        if (n.charAt(0) == 's')
        return true;
        else if(n.length() >=6)
        {
            if (n.substring(0,5) == "I(C)T")
                return expression(n.substring(6, n.length()-1));


        }
        return false;

    }
}

1 个答案:

答案 0 :(得分:1)

首先,第一个字符为's'的条件不足(根据规则,它应该是大写的'S' BTW)。这甚至可以为空字符串抛出异常。此外,它接受以s开头的任何字符串,包括"so you want this string to match too"

此外,您不会检查()周围的.exp>括号,这也需要完成。此外,将不是编译时常量的String==进行比较不起作用(参见How do I compare strings in Java?):

public static boolean expression(String n) {
    return n.equals("S") ||
            (n.startsWith("I(C)T(") && n.endsWith(")") && expression(n.substring(6, n.length()-1)));
}