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