Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中读取和接受名为/id/title的自定义CLI参数?_Java_Java 8_Command Line Interface_Command Line Arguments - Fatal编程技术网

如何在Java中读取和接受名为/id/title的自定义CLI参数?

如何在Java中读取和接受名为/id/title的自定义CLI参数?,java,java-8,command-line-interface,command-line-arguments,Java,Java 8,Command Line Interface,Command Line Arguments,我希望在运行Java程序时读取并接受自定义CLI参数值,如下所示: java BookSales --books=/path/to/books.list --sales=/path/to/sales.list --top_selling_books=3 --top_customers=2 --sales_on_date=2018-02-01 String books_path = null; String sales_path = null; ... ... for(int i = 0;

我希望在运行Java程序时读取并接受自定义CLI参数值,如下所示:

java BookSales --books=/path/to/books.list 
--sales=/path/to/sales.list --top_selling_books=3 
--top_customers=2 --sales_on_date=2018-02-01
String books_path = null;
String sales_path = null;
...
...
for(int i = 0; i<args.length; i++) {
    if(args[i].toLowerCase().indexOf("--books=") != -1) {
        books_path = args[i].split("=")[1];
    }
    if(args[i].toLowerCase().indexOf("--sales=") != -1) {
        sales_path = args[i].split("=")[1];
    }
    ...
    ...
}
System.out.println(books_path);
System.out.println(sales_path);
程序必须接受以下参数,并且能够使用命令行上的值,有些是必需的,有些是可选的

--books=/path/to/books.list (required)
--sales=/path/to/sales.list (required)
--top_selling_books=<count> (optional) 
--top_customers=<count> (optional)
--sales_on_date=<date> (optional)
--books=/path/to/books.list(必需)
--sales=/path/to/sales.list(必需)
--畅销书=(可选)
--顶级客户=(可选)
--销售日期=(可选)
我所做的如下所示:

java BookSales --books=/path/to/books.list 
--sales=/path/to/sales.list --top_selling_books=3 
--top_customers=2 --sales_on_date=2018-02-01
String books_path = null;
String sales_path = null;
...
...
for(int i = 0; i<args.length; i++) {
    if(args[i].toLowerCase().indexOf("--books=") != -1) {
        books_path = args[i].split("=")[1];
    }
    if(args[i].toLowerCase().indexOf("--sales=") != -1) {
        sales_path = args[i].split("=")[1];
    }
    ...
    ...
}
System.out.println(books_path);
System.out.println(sales_path);
String books\u path=null;
字符串sales_path=null;
...
...

for(int i=0;iJava没有内置任何东西允许您在标准字符串操作之外解析命令行参数。如果您不想使用Apache Commons CLI之类的库,则需要自己编写

自己写并不是一件小事,它可以成为一个timesink。我建议你重新考虑,只需要使用一个库就可以了


问题中的代码是一个很好的例子,说明了为什么不应该自己编写代码:它非常脆弱,并且已经有很多bug(请参见JB Nizet的评论)在所示的小片段中。

Java没有内置任何东西允许您在标准字符串操作之外解析命令行参数。如果您不想使用Apache Commons CLI之类的库,则需要自己编写

自己写并不是一件小事,它可以成为一个timesink。我建议你重新考虑,只需要使用一个库就可以了


问题中的代码是一个很好的例子,说明了为什么不应该自己编写代码:它非常脆弱,并且已经有很多bug(请参见JB Nizet的评论)在显示的小片段中。

条件不正确:我可以使用
java BookSales hello--books--word=/path/to/books.list
,但它仍然会将其作为--books参数接受。当然,如果我只使用--books而不使用=,代码将抛出运行时异常。因此,您应该更严格地验证参数。但是如果我真的不想使用一个已经为你做了这项工作的库,那么你必须重新设计它,是的。你至少应该在一个方法中考虑到这一点,而不是重复相同的代码。你可以在下面的链接中找到解决方案。希望这有帮助。条件不正确:我可以使用
java BookSales hello--books--word=/path/to/books.list
它仍然会将其作为--books参数接受。当然,如果我只使用--books而不使用=,代码将引发运行时异常。因此,您应该更严格地验证参数。但是如果您真的不想使用已经为您完成任务的库,那么您必须重新创建它,是的。您至少应该考虑到这一点在方法中,而不是重复相同的代码。您可以在下面的链接中找到解决方案。希望这对您有所帮助。