解析许多命令的最聪明方法?

时间:2019-05-09 18:56:16

标签: java

对于一项作业,我需要创建一个可以使用简单功能(例如ADD,SUB,LOAD,STORE和JUMP)的基本处理器

作为输入,我必须使用文本文件,解析20个不同的命令,然后执行它们。

我的问题是如何最好地解析字符串,将它们与相应的命令匹配,然后执行它们?

例如,我可以逐行解析文件,对字符串进行标记,通过包含所有命令的大型if-else语句发送标记,然后通过为每个命令创建一个类来调用这些命令(之前),然后执行该类。

但是我认为这不是解决问题的最佳方法。有没有更好的方法,或者我可以在示例中改善某些地方?

2 个答案:

答案 0 :(得分:3)

将命令作为界面并将其映射到String

interface Command{
    void execute();
}

Map<String, Command> map = new HashMap<>();

接下来相应地映射命令的所有实现:

map.put("ADD", () -> System.out.println("Calling Add"));

然后在标记线之后,只需搜索地图并执行命令,别忘了检查命令是否存在。

for (String token : tokens){
      map.getOrDefault(token, () -> System.out.println("Command " + token + " not found")).execute();
}

答案 1 :(得分:0)

根据您在后续评论中所述的格式,我将使用Scanner类读取由空格分隔的每一行,因为这是文本输入中的分隔符。

从那里,您可以使用switch语句根据从文本输入中提取的字符串来决定要执行的操作。由于您仍然必须为每个命令编写逻辑,因此switch语句看起来比巨大的if-else噩梦更干净

编辑:

我还将阐明如何进一步执行此操作:

Scanner reader = new Scanner(new File("ints.txt"));
while (reader.hasNext()){
    Scanner parser = new Scanner(reader.nextLine());
    parser.useDelimiter(" ");
    //access each piece of the command by using parser.next();
}