【发布时间】:2013-02-24 04:15:47
【问题描述】:
我需要连接两个命令行参数。用户应该输入-input“filename.txt”和/或-output“filename.txt”,但我似乎无法将-input 或-output 部分与文件名连接起来。
例如,用户可以输入以下任何内容:
java classname
java classname -input filename.txt
java classname -output filename.txt
java classname -input filename.txt -output filename.txt
java classname -output filename.txt -input filename.txt
我试过了:
for(int i = 0; i < args.length; i++){
if(args[i].equals("-input")){
input = args[i + 1];
}
else{
//input from terminal
}
if(args[i].equals("-output")){
output = args[i + 1];
}
else{
//output to terminal
}
但它不起作用并且看起来不优雅。我一直在研究 Apache Commons CLI,但我似乎无法完全弄清楚它是如何工作的以及是否有适用的功能。使用 Apache 的东西或其他方式有什么方法可以将 -input 连接到 filename.txt?
【问题讨论】:
-
"-fin" 和 "-input" 是完全不同的字符串,对于 "-fout" 和 "-output" 也是如此。为什么要让您和我们更加困惑?
-
糟糕!抱歉,我复制了我的注释代码,但没有意识到我没有更改字符串以匹配。我现在修好了。
-
如果你的命令行结构是正确的,那么你只需要计算命令行参数数组的大小,如果前一个参数是一个,则查看奇数个参数并处理下一个参数兴趣。在比赛的这个阶段,我不会担心优雅。我会更担心“功能”。
-
您可能遇到的一个问题是您找到了参数 i 和 i+1。然后将 i 增加 1。您可能需要将 i 增加 2。
-
Apache cli 库看起来确实很有用。你试过玩它吗?看起来您需要做的就是将两个 Option 对象添加到一个 Options 对象,然后调用
parse(...)传入 Options 对象和您的命令行。然后,从返回的 CommandLine 对象中提取所需的字符串将是一件容易的事。拍摄,我可能不得不下载这个库,因为它看起来非常简单和有用。感谢您的提醒!
标签: java command-line arguments apache-commons args