【问题标题】:How to connect two command line arguments?如何连接两个命令行参数?
【发布时间】: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


【解决方案1】:

这应该有效

public static void main(String[] args) {
    String input = findArg("input", args);
    String output = findArg("output", args);
}

static String findArg(String name, String[] args) {
    for (int i = 0; i < args.length; i += 2) {
        if (args[i].equals("-" + name)) {
            return args[i + 1];
        }
    }
    return null;
}

【讨论】:

    【解决方案2】:

    你的逻辑有缺陷;这就是为什么它不起作用。如果我使用以下参数java classname -input input.txt -output output.txt 运行程序,那么您的代码将从终端获取输入并输出到 output.txt。

    更新 - 实际上它会因 NullPointerException 而崩溃

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2010-12-09
      • 2019-03-21
      • 1970-01-01
      • 2012-01-28
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多