Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 Args4j列出包含未处理空间的参数_Java_Command Line_Args4j - Fatal编程技术网

Java Args4j列出包含未处理空间的参数

Java Args4j列出包含未处理空间的参数,java,command-line,args4j,Java,Command Line,Args4j,我正在处理一个奇怪的args4j错误。我正在处理列表命令行参数 aaa.jar -list special_date=2015-05-05 "special_name=bob the builder" 这件事由我来处理 。当我检索列表中的参数时,我得到的是 [special_date=2015-05-05, special_name=bob, the, builder] Java文档说这应该是可行的 java -jar aaa.jar -s banan hruska jablko jav

我正在处理一个奇怪的args4j错误。我正在处理列表命令行参数

aaa.jar -list special_date=2015-05-05 "special_name=bob the builder"
这件事由我来处理

。当我检索列表中的参数时,我得到的是

[special_date=2015-05-05, special_name=bob, the, builder]
Java文档说这应该是可行的

 java -jar aaa.jar -s banan hruska jablko
 java -jar aaa.jar -s banan "hruska jablko"
 java -jar aaa.jar -s "banan hruska jablko"
 java -jar aaa.jar -s banan hruska jablko -l 4 -r
 java -jar aaa.jar -t 222 -s banan hruska jablko -r
处理带引号的单个参数时没有错误

aaa.jar -a "bob the builder"
很好用

谢谢

这是非常简单的,您可以很容易地根据自己的目的进行调整。像这样的方法应该会奏效:

public class WellBehavedStringArrayOptionHandler extends OptionHandler<String> {
  public WellBehavedStringArrayOptionHandler(
      CmdLineParser parser, OptionDef option, Setter<String> setter) {
    super(parser, option, setter);
  }

  @Override
  public String getDefaultMetaVariable() {
    return Messages.DEFAULT_META_STRING_ARRAY_OPTION_HANDLER.format();            
  }

  @Override
  public int parseArguments(Parameters params) throws CmdLineException {
    int counter;
    for (counter = 0; counter < params.size(); counter++) {
      String param = params.getParameter(counter);
      if(param.startsWith("-")) {
        break;
      }
      setter.addValue(param);
    }
    return counter;
  }
}
公共类welleHavedStringArrayOptionHandler扩展了OptionHandler{
公共井道排列选项处理器(
CmdLineParser(解析器、OptionDef选项、Setter设置器){
super(解析器、选项、setter);
}
@凌驾
公共字符串getDefaultMetaVariable(){
返回消息。默认值\元\字符串\数组\选项\处理程序。格式();
}
@凌驾
公共int parseArguments(参数params)引发CmdLineException{
整数计数器;
用于(计数器=0;计数器
最简单的答案是使用默认的args4j内置StringArrayOptionHandler:

import org.kohsuke.args4j.spi.StringArrayOptionHandler;
//

然后连接选项的各个部分:

String getOption() {
    StringBuilder cmd = new StringBuilder();
    for (int i = 0; i < option.length; i++) {
        cmd.append(option[i]);
        cmd.append(" ");
    }
    return cmd.toString().trim();
}
String getOption(){
StringBuilder cmd=新的StringBuilder();
for(int i=0;i
您误读了javadoc;它说,“所有这些例子都产生了一个包含三个标记的字符串数组:
banan
hruska
,和
jablko
。”
String getOption() {
    StringBuilder cmd = new StringBuilder();
    for (int i = 0; i < option.length; i++) {
        cmd.append(option[i]);
        cmd.append(" ");
    }
    return cmd.toString().trim();
}