0

我试图将字符串元组存储在数组列表中,在终端中我输入以下命令

> 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);
      }
    }
}
4

1 回答 1

0

默认情况下,JCommander 使用逗号分割参数:有关详细信息,请参阅自定义类型 - 转换器和分割器 -> 分割。这就是导致您的问题的原因。解决它的一种方法是提供一个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);
        }
    }
}

这应该可以解决您的问题。

于 2017-05-21T02:58:26.497 回答