如何在需要之前使用可选参数?

时间:2014-05-01 18:46:24

标签: java command-line

我的大学任务是编写一个可以从命令行启动的应用程序,如下所示:

java MyApplication [protocol:]server[:port]

例如:

java MyApplication tcp:localhost:80

我知道我必须将MyApplication类设计如下:

class MyApplication{
    public void main(String[] args){
    }
}

然后,args [0]将是第一个参数,args [1]是第二个参数,args [2]是第三个参数。但是如何在强制性参数之前处理可选参数?如果未设置可选参数,则args [0]将成为必需参数,不是吗?

在这个例子中,它可以很容易处理,因为我可以查看args [0]是“tcp”还是“udp”还是服务器名。但在我的另一个练习中,在强制性练习之前最多有七个可选参数。有没有诀窍怎么做?

令我困惑的另一件事是我们学会了使用空格分隔参数。在这个例子中,看起来它被双点分隔。我能以某种方式配置args-separator吗?

3 个答案:

答案 0 :(得分:0)

从外观上看,URI字符串将作为单个字符串参数传递给您的应用程序。您最有可能需要自己进行解析,以确定如何在传入时使用该参数.Java不会将协议或端口添加为单独的参数,除非它们是'被空间隔开。

作为旁注,我是apache commons cli的忠实粉丝,因为在命令行上进行参数解析更容易。

答案 1 :(得分:0)

args[0]是第一个空格之前的全部内容。

所以,如果你这样做

java MyApplication tcp:localhost:80

然后在您的计划中args[0] = "tcp:localhost:80"

如果你这样做

java MyApplication tcp:localhost:80 test1 test2

然后

args[0] = "tcp:localhost:80"
args[1] = "test1"
args[2] = "test2"

答案 2 :(得分:0)

由于没有空格,因此它们都将被读入相同的字符串参数。您可以使用String.split将String拆分为多个部分,然后计算部分。如果有一个或三个部分,那么答案很简单。如果有两个部分,那么您可以与TCP或UDP进行比较,以查看第一部分是协议还是服务器。