【问题标题】:store tuples in a list using jcommander使用 jcommander 将元组存储在列表中
【发布时间】:2017-05-21 11:06:27
【问题描述】:

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

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

【问题讨论】:

    标签: java arraylist tuples jcommander


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 2019-10-26
      • 2017-06-03
      • 2020-08-09
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多