java - 我应该如何解析命令行样式输入?

标签 java parsing text

我正在编写一个程序,用户可以在其中输入类似的内容

add 5 2

define foo

现在我知道处理此输入的唯一方法是一堆 if/else if 语句,即

if(args[0] == "add") add();
else if (args[0] == "define") define();
else print("Command not found.");

是否有更好的方法来做到这一点,或者可能是这些类型输入的标准数据结构/算法?我专门使用 Java,但如果可能的话,我更喜欢与语言无关的答案。谢谢!

最佳答案

设计模式命令可用于此目标。例如:

abstract class Command {
    abstract public String getCommandName();
    abstract public String doAction();
}

要定义自己的函数,只需实现 Command 类:

class AddCommand extends Command {
    @Override
    public String getCommandName() {
        return "add";
    }

    @Override
    public String doAction() {
        // do your action
    }
}

那么你的主类应该是这样的:

public class Main {

    private static Map<String, Command> commands = new HashMap<String, Command>();

    private static void init() {
        Command addCommand = new AddCommand();
        commands.put(addCommand.getCommandName(), addCommand);
    }

    public static void main (String[] args) {
        init();
        if (args[0] != null) {
            Command command = commands.get(args[0]);
            if (command != null) {
                System.out.println(command.doAction());
            } else {
                System.out.println("Command not found");
            }
        }
    }

关于java - 我应该如何解析命令行样式输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16511871/

相关文章:

parsing - awk 处理和解析

python - Pandas 读取文本文件切片列可能与空字符串/值根据字符串/值与标题对齐

text - 制表符分隔或逗号分隔输出中的新行

java - 在 JSch ChannelSftp 操作上配置超时

java - 将 LongBuffer/IntBuffer/ShortBuffer 转换为 ByteBuffer

python - 基于关键字搜索使用python从xml文件中提取值

ios - 如何在单元格中设置视频的缩略图

javascript - 使用 javascript 获取元素内的文本

java - 如何使用不同导入的双定时器

java - 没有找到接口(interface) java.util.List Rest API Spring boot 的主构造函数或默认构造函数