如何在java中处理符号?

如何在java中处理符号?,java,Java,我有一个具有不同参数(字符串和int值)的命令行 问题是这个输入字符串中有空格和=字符,Java将其识别为分隔符。现在我想知道如何将其解析到我的程序中 我在寻找一种可能,使它尽可能简单。参数值还必须传递给各种子例程。因此,我正在寻找一种方法来轻松访问参数,将其传递给子例程,同时控制每个命令行是否包含这些参数(以及它们是否实际包含有效值)。 也许有人能给我一个提示,如何以最“正确”的方式来做这件事 类似这样: public class Demo { public static void m

我有一个具有不同参数(字符串和int值)的命令行

问题是这个输入字符串中有空格和=字符,Java将其识别为分隔符。
现在我想知道如何将其解析到我的程序中

我在寻找一种可能,使它尽可能简单。参数值还必须传递给各种子例程。因此,我正在寻找一种方法来轻松访问参数,将其传递给子例程,同时控制每个命令行是否包含这些参数(以及它们是否实际包含有效值)。

也许有人能给我一个提示,如何以最“正确”的方式来做这件事

类似这样:

public class Demo {
    public static void main(String[] args) {
        Map<String, String> cliParams = new HashMap<>();

        // Full set of required parameters
        cliParams.put("t", null);
        cliParams.put("vo", null);
        cliParams.put("q", null);

        for (String arg : args) {
            String[] nameAndValue = arg.split("=", 2);
            if (nameAndValue.length != 2)
                throw new IllegalArgumentException("Invalid parameter syntax: " + arg);

            String name = nameAndValue[0];
            String value = nameAndValue[1];
            if (cliParams.replace(name, value) != null)
                throw new IllegalArgumentException("Parameter given more than once: " + arg);
        }

        cliParams.forEach((k, v) -> {
            if (v == null) 
                throw new IllegalStateException("Required parameter missing: " + k);
        });

        int q = Integer.parseInt(cliParams.get("q"));
    }
}
公共类演示{
公共静态void main(字符串[]args){
Map cliParams=new HashMap();
//全套必需参数
cliParams.put(“t”,null);
cliParams.put(“vo”,null);
cliParams.put(“q”,null);
for(字符串arg:args){
字符串[]name和value=arg.split(“=”,2);
如果(name和value.length!=2)
抛出新的IllegalArgumentException(“无效参数语法:“+arg”);
字符串名称=名称和值[0];
字符串值=名称和值[1];
if(cliParams.replace(名称、值)!=null)
抛出新的IllegalArgumentException(“参数多次给定:“+arg”);
}
cliParams.forEach((k,v)->{
如果(v==null)
抛出新的IllegalStateException(“缺少必需参数:+k”);
});
intq=Integer.parseInt(cliParams.get(“q”));
}
}

这样的建议有点超出了堆栈溢出的范围,但我建议您研究一个可以为您做到这一点的库,比如@Mureinik,我也是这么想的,但Apache Commons CLI和许多其他开源CLI解析器设计用于处理类似POSIX的选项和位置参数,这是与OP不同的CLI语法方案,OP是位置独立的命名参数。我想把这些收集到HashMap中可能已经足够好了。谢谢你们两位@DodgyCodeException你能告诉我如何将它们收集到hashmap中吗?我的意思是,如何指定什么是参数,什么是值?那太好了!非常感谢你!真的很有帮助。只是一个关于代码的简单问题。我是否也应该在main中捕获异常?您不必在main中捕获异常。它们将被报告到控制台(就像您自己捕获并完成printStackTrace()一样)。如果你想做一些特殊的事情,比如说,如果你有一些恢复计划,你只需要捕捉它们。