从动态参数创建字符串数组和字符串变量

时间:2019-12-05 15:40:49

标签: java arrays

我试图实现输入n个参数作为java main函数的参数。

从这n个参数中,它们中的n-1个是输入文件,第n个是输出文件。

public static void main(String[] args) {

    List<String> stringList = new ArrayList<String>();
    String xlsxFileAddress;
    for (int i = 0; i < args.length - 1; i++) {
        stringList.add(args[i].toString());
    }
    String[] csvFileAddress = (String[]) stringList.toArray();

    xlsxFileAddress = args[args.length - 1];
    for (int i = 0; i < 2; i++) {
        System.out.println(csvFileAddress[i]);
    }

    System.out.println(xlsxFileAddress);
    csvToXLSX(csvFileAddress, xlsxFileAddress);
}

但这会引发以下错误-

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    at com.jcg.csv2excel.CsvToExcel.main(CsvToExcel.java:109)

4 个答案:

答案 0 :(得分:3)

您需要使用带数组的toArray()重载版本,这将指示要构建的数组的正确类型,因此您将没有类强制转换异常。尝试以下方法:

 String[] csvFileAddress = stringList.toArray(new String[stringList.size()]);

答案 1 :(得分:2)

当您尝试将列表转换为数组时,需要指定数组类型和大小。

String[] csvFileAddress =stringList.toArray(new String[stringList.size()]);

答案 2 :(得分:0)

toArray()将返回Object[],而与generics无关。您可以改用超载的变体。

使用以下内容:

String[] csvFileAddress =stringList.toArray(new String[stringList.size()]);

答案 3 :(得分:0)

两种解决问题的方法

使用toArray()

String[] csvFileAddress = stringList.toArray(new String[0])

使用stream()

String[] csvFileAddress = stringList.stream().toArray(String[]::new)
相关问题