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
在此先感谢。
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();
}
要轻松地把String
成String[]
使用:
String[] entriesArr = new String[]{ entries };
或快捷方式现在
String[] entriesArr = { entries };
entriesArr
是包含一个元素的String[]
,entries
。
或者这个快捷方式,因为这是一个声明:String [] strs = {str}; – 2009-05-27 21:19:52
良好的通话! – jjnguy 2009-05-27 22:27:25
请注意,该元素应该是一个字符串字面值,所以实际上该行应该是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块的
CsvReader
和CsvWriter
(所以他们仍然会得到,如果有什么差错关闭)
建设从现有的人会是这样的(以下的例子)新的字符串数组:
String[] newRow = new String[] { oldRow[0], oldRow[2], oldRow[1] };
这基本上只会保留前三列,转换第二和第三列。如果您需要其他栏目,只需以相同的方式进行更改即可。
注意,我不会建议使用FileWriter
写入一个文件 - 使用FileOutputStream
和OutputStreamWriter
链接到它,因为这可以让你设置的字符编码,而不是使用默认的平台之一。
我很确定你是对的。 CsvWriter的Javadoc赞同你的期望,但我从未使用它。 – mkb 2009-05-27 20:04:28
目标是提取csv文件中选定数量的列,操纵/格式化其中的一些列表,然后使用逗号将它们插入到输出文件中,并使用分号作为行结束符。 writeall只是将所有东西都转储出来,而不是只输出我需要的列 – phill 2009-05-27 20:15:16
我用建议的更改对其进行了更新,但是现在我产生了一个不同的错误。这是说'.class'是预期的,并有一个胡萝卜指向nextLine ..是否正确的语法在while循环中声明这样的字符串? – phill 2009-05-27 20:54:22
writer.writeNext(字符串[])正在寻找一个数组,它将然后写为 “[0],[1],[2]”
由于要存储整个csv文件作为一个字符串,你需要分割该字符串备份。真的,你应该不把每个项目组合成一个字符串,而是将其存储为一个字符串数组,代表csv文件中的每一行。
我累了,懒惰,不在乎为你做所有事情:错误发生在哪里? – Pesto 2009-05-27 20:01:37
在你的新代码中,你只是缺少“新”。它应该是“字符串[] newRow =新的字符串[] ...” – 2009-05-27 20:58:02
很酷..真的有帮助..不知道为什么我得到一个在while循环中声明的变量 – phill 2009-05-27 21:05:06