Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 使用jcommander将元组存储在列表中_Java_Arraylist_Tuples_Jcommander - Fatal编程技术网

Java 使用jcommander将元组存储在列表中

Java 使用jcommander将元组存储在列表中,java,arraylist,tuples,jcommander,Java,Arraylist,Tuples,Jcommander,我试图将字符串元组存储在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 我试图得到这个输出 A 60 B 90 C 50 D 40 E 70 F 100 G 1000

我试图将字符串元组存储在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
我试图得到这个输出

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);
      }
    }
}
import java.util.ArrayList;
导入java.util.List;
导入com.beust.jcommander.jcommander;
导入com.beust.jcommander.Parameter;
班长{
@参数(名称={“-P”},变量性=真)
公共列表值=新的ArrayList();
公共静态void main(字符串…argv){
Main Main=新Main();
JCommander.newBuilder()
.addObject(主)
.build()
.parse(argv);
main.run();
}
公开募捐{
for(字符串值:值){
系统输出打印项次(val);
}
}
}

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);
        }
    }
}
公共类主{
私有静态最终类NonSplitingSpliter实现IPParameterSplitter{
公共列表拆分(字符串值){
返回集合。singletonList(值);
}
}
@参数(名称={“-P”},
拆分器=非拆分拆分拆分器.class,
可变性=真)
公共列表值=Collections.emptyList();
公共静态void main(字符串…argv){
Main Main=新Main();
JCommander.newBuilder()
.addObject(主)
.build()
.parse(argv);
main.run();
}
公开募捐{
for(字符串值:值){
系统输出打印项次(val);
}
}
}
这应该能解决你的问题