Java:将String []数组元素赋给String?

时间:2009-05-27 19:57:53

标签: java arrays string

我对此很陌生,这可能是一个非常明显的答案。在我的csv脚本中,我试图弄清楚如何使用CSVReader类读取csv文件并写入新的csv文件。错误告诉我writeNext(java.lang.String [])不能应用于(java.lang.String)。我尝试过使用直接赋值和getString()方法但是没有任何效果。有任何想法吗?

我有以下代码: 已更新

public static void main(String[] args) throws IOException {
    //read csv file
    CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));

    //write to csv file 
    CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');

    String [] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        System.out.println("Name: [" + nextLine[0] + "]\nAddress: [" + nextLine[1] + "]\nEmail: [" + nextLine[2] + "]");
        String[] newRow = new String[] {nextLine[0],nextLine[2], nextLine[1]};
    }

    //writer2.writeNext(entries);
    writer2.writeAll(newRow);
    writer2.close();

}

错误: c:\ java \ examples \ ETHImport.java:46:找不到symbo 符号:变量newRow location:ETHImport类                  writer2.writeAll(NEWROW);

1错误

提前致谢。

4 个答案:

答案 0 :(得分:3)

您需要一个字符串数组,而不是一个字符串。您真的确定要将所有值拉入单个字符串中吗?我希望writeNext根据你给它的字符串值写一行, it 放入逗号等等。毕竟,它是CsvWriter - 它应该用逗号分隔。

在我看来,您已经使用的writeAll方法符合您的要求,而writeNext只会写一行...您想要实现的目标是什么{ {1}}不适合你吗?为什么你需要逐行阅读并首先构建writeAll?你不能打电话:

entries

我的猜测是,如果writer2.writeAll(allElements); 的构造方式如何,那将会写一个 tab -separated文件。

编辑:鉴于评论中的其他信息,我怀疑你想:

  • 打开writer2
  • 打开CsvReader(使用适当的CsvWriterWriter作为构造函数参数)
  • 循环读取一行一行作为字符串数组(使用;),为输出创建新的字符串数组,然后调用CsvReader.readNext()将该字符串数组写入文件。
  • 关闭finally块中的CsvWriter.writeNext()CsvReader(如果出现任何问题,它们仍将关闭)

从现有的字符串数组构建新的字符串数组将类似于(按照您的示例):

CsvWriter

基本上只保留前三列,转换第二列和第三列。如果您需要其他列,只需以相同的方式进行更改。

请注意,我不会建议使用String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] }; 写入文件 - 使用FileWriterFileOutputStream链接到该文件,因为这样可以您设置字符编码而不是使用平台默认编码。

答案 1 :(得分:2)

String[] entries = new String[] { "entry1", "entry2"};

期望一个条目数组而不仅仅是一个String。如果您按照此示例http://opencsv.sourceforge.net/注意到

String[] entries = "first#second#third".split("#");

最后的拆分调用导致String []。

代码:

public static void main(String[] args) throws IOException {
        //read csv file
        CSVReader reader = new CSVReader(new FileReader(ADDRESS_FILE));

        //write to csv file 
        CSVWriter writer2 = new CSVWriter(new FileWriter("output.csv"), '\t');

        String [] nextLine;
        while ((nextLine = reader.readNext()) != null) {
                writer2.writeNext( new String[] {nextLine[0],nextLine[2], nextLine[1]});
        }


        writer2.close();

}

答案 2 :(得分:2)

轻松将String放入String[]使用:

String[] entriesArr = new String[]{ entries };

或快捷方式

String[] entriesArr = { entries };

现在entriesArrString[],其中包含一个元素entries

答案 3 :(得分:0)

writer.writeNext(String [])正在寻找一个数组,然后将其写为“[0],[1],[2]”

由于您将整个csv文件存储为一个字符串,因此需要拆分该字符串备份。实际上,您应该不将每个项目组合成一个字符串,而是将其存储为表示csv文件中每个单独行的字符串数组。