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

问题描述:

我对此很新颖,这可能是一个非常明显的答案。在我的csv脚本中,我试图弄清楚如何使用CSVReader类读取一个csv文件并写入一个新的csv文件。该错误告诉我writeNext(java.lang.String [])不能应用于(java.lang.String)。我试过使用直接赋值和getString()方法,但没有任何工作。有任何想法吗?Java:将String []数组元素赋值给一个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) { 
     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的\例子\ ETHImport.java:46:找不到个符号 符号:可变NEWROW 位置:类ETHImport writer2.writeAll(newRow);

1 error

在此先感谢。

+0

我累了,懒惰,不在乎为你做所有事情:错误发生在哪里? – Pesto 2009-05-27 20:01:37

+0

在你的新代码中,你只是缺少“新”。它应该是“字符串[] newRow =新的字符串[] ...” – 2009-05-27 20:58:02

+0

很酷..真的有帮助..不知道为什么我得到一个在while循环中声明的变量 – phill 2009-05-27 21:05:06

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

它期望的是一组条目而不是一个字符串。如果你是以下这个例子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(); 

} 
+0

我在挣扎的是只为每个记录集创建一个具有选定列的字符串,所以我可以将它写入一个新文件 – phill 2009-05-27 20:17:16

+0

您不应该构建字符串。你应该用选定的列建立一个字符串*数组*。 – 2009-05-27 20:22:13

+0

太棒了!我不知道我可以在方法中声明一些东西。谢谢! – phill 2009-05-27 21:16:36

要轻松地把StringString[]使用:

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

或快捷方式现在

String[] entriesArr = { entries }; 

entriesArr是包含一个元素的String[]entries

+0

或者这个快捷方式,因为这是一个声明:String [] strs = {str}; – 2009-05-27 21:19:52

+0

良好的通话! – jjnguy 2009-05-27 22:27:25

+0

请注意,该元素应该是一个字符串字面值,所以实际上该行应该是String [] entriesArr = new String [] {“entries”}。 – portfoliobuilder 2015-02-12 00:42:52

您需要一个字符串数组,而不是一个字符串。你确定你想把所有的值都放到一个单独的字符串中来开始吗?我期望writeNext根据你给它的字符串值写一行,用放入逗号等等。毕竟,它是一个CsvWriter - 它应该做逗号分隔。

它看起来对我来说,你已经在使用你想要做什么它的writeAll方法,并writeNext将只写一行...什么是你想实现这一writeAll不会为你做什么?为什么你需要逐行阅读并首先构建entries?你就不能叫:

writer2.writeAll(allElements); 

我的猜测是,那将写一选项卡 - 分隔文件不过,鉴于writer2是如何构建的。

编辑:鉴于该评论的附加信息,我怀疑你想:

  • 打开CsvReader
  • 打开CsvWriter(用适当的Writer;作为构造函数的参数)
  • 一次循环读取一行作为字符串数组(使用CsvReader.readNext()),为输出创建一个新的字符串数组,然后调用CsvWriter.writeNext()将该字符串数组写入该文件。
  • 关闭在finally块的CsvReaderCsvWriter(所以他们仍然会得到,如果有什么差错关闭)

建设从现有的人会是这样的(以下的例子)新的字符串数组:

String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] }; 

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

注意,我不会建议使用FileWriter写入一个文件 - 使用FileOutputStreamOutputStreamWriter链接到它,因为这可以让你设置的字符编码,而不是使用默认的平台之一。

+0

我很确定你是对的。 CsvWriter的Javadoc赞同你的期望,但我从未使用它。 – mkb 2009-05-27 20:04:28

+0

目标是提取csv文件中选定数量的列,操纵/格式化其中的一些列表,然后使用逗号将它们插入到输出文件中,并使用分号作为行结束符。 writeall只是将所有东西都转储出来,而不是只输出我需要的列 – phill 2009-05-27 20:15:16

+0

我用建议的更改对其进行了更新,但是现在我产生了一个不同的错误。这是说'.class'是预期的,并有一个胡萝卜指向nextLine ..是否正确的语法在while循环中声明这样的字符串? – phill 2009-05-27 20:54:22

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

由于要存储整个csv文件作为一个字符串,你需要分割该字符串备份。真的,你应该不把每个项目组合成一个字符串,而是将其存储为一个字符串数组,代表csv文件中的每一行。