我的大学任务是编写一个可以从命令行启动的应用程序,如下所示:
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吗?
答案 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进行比较,以查看第一部分是协议还是服务器。