java - 区分一字、二字和三字命令

标签 java split command java-stream

现在,我正在使用此方法来检查用户是否刚刚输入了带有错误参数的命令:

    private boolean relatedCommand(String input) {
        // make sure the split afterwards has at least size one
        if (input.matches(" .*")) {
            return false;
        }
        final String command = input.split(" ".toString())[0];
        return COMMAND_PACKAGE
                .keySet()
                .stream()
                .map(Pattern::toString)
                .anyMatch(patternText -> patternText.startsWith(command + " ");
    }

(COMMAND_PACKAGE 包含所有已注册的命令)

现在,这对于单字命令来说非常有效。例如get <argument1> <argument2> , remove <argument1> .

但是,我目前正在开发一个同时具有单字和双字命令的项目。 以下是一系列实际上不适用于此方法的命令: add track <argument1> , add switch <argument1> , step <argument> 。在本例中,对于命令 add track <argument1> ,“track”被视为一个参数,但它确实属于命令本身。

如果仅输入“add”,则错误消息为“无效参数”。相反,错误消息应该更准确,并告诉他该命令不存在(因为只有“添加轨道”或“添加开关”)。

有人知道如何区分单字命令和双字命令吗?用户还可以使用命令delete rolling stock <argument>它由三个字的命令组成。

总而言之,因此有必要区分一字、二字和三字的命令。

最佳答案

说实话,解决这个问题最简单、最有效的方法是创建包含两个或三个单词的命令列表,然后简单地在单独的方法中执行匹配,这样,如果您命中某个关键字,该列表就是该命令的一部分对于较长的命令,您检查下一个单词,看看它是否是您期望的命令的一部分。

根据命令的具体规范等,您也许可以使用 HashMap<String, HashMap<String, String>>来表示命令。这样,您可以简单地执行一些操作,例如将前缀存储为键,然后将后缀存储为值。

关于java - 区分一字、二字和三字命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60250206/

相关文章:

grails - Netbeans上缺少Grails命令?

java - 通过mbean操作抛出异常

java - 如何在Java中分割一个数字而不丢失其他相同的字符

java - 运行时 gc 实际上做了什么以及导致此输出的原因是什么?

c# - 在 C# 中根据空格拆分字符串

delphi - 如何在 Delphi 中将一个 StringList 拆分为两个字符串列表?

linux - 将运行时日志存储在文件夹中

shell - 我可以使用-put命令在HDFS中传输文件吗?

java - AndroidPDFViewer - 无法在我的应用程序中打开 pdf 文档

java - 将一个数组列表相对于另一个数组列表进行排序