我试图将字符串元组存储在一个arraylist中,当我在终端中输入以下命令时
> java Main -P A,60 B,90 C,50 D,40 E,70 F,100 G,1000
,但是当程序找到逗号时,元素被分成两部分, 所以我得到了这个输出
A
60
B
90
C
50
D
40
E
70
F
100
G
1000
我试图获得此输出
A,60
B,90
C,50
D,40
E,70
F,100
G,1000
我该如何解决? 这是我的代码
import java.util.ArrayList;
import java.util.List;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
class Main {
@Parameter(names={"-P"}, variableArity=true)
public List<String> values = new ArrayList<String>();
public static void main(String ... argv) {
Main main = new Main();
JCommander.newBuilder()
.addObject(main)
.build()
.parse(argv);
main.run();
}
public void run() {
for (String val: values) {
System.out.println(val);
}
}
}
答案 0 :(得分:0)
JCommander默认使用逗号分隔参数:See custom types - converters and splitters -> Splitting以获取详细信息。这就是造成问题的原因。解决它的一种方法是提供一个不分裂的IParameterSplitter
:
public class Main {
private static final class NonSplittingSpliter implements IParameterSplitter {
public List<String> split(String value) {
return Collections.singletonList(value);
}
}
@Parameter(names={"-P"},
splitter = NonSplittingSpliter.class,
variableArity = true)
public List<String> values = Collections.emptyList();
public static void main(String ... argv) {
Main main = new Main();
JCommander.newBuilder()
.addObject(main)
.build()
.parse(argv);
main.run();
}
public void run() {
for (String val: values) {
System.out.println(val);
}
}
}
这应该可以解决您的问题。