当前位置: 首页 > 知识库问答 >
问题:

使用CSVWriter编写字符串数组-有些带引号,有些不带引号

澹台权
2023-03-14

我想打印如下内容:

abc、def、ghi、JKL、mno、pqr

我刚写的时候:

CSVWriter writer = new CSVWriter(new FileWriter(getFullPathToTestFile(), true));
String[] newLine = { "abc","def","ghi","jkl","mno","pqr" };
writer.writeNext(newLine);

所以我试着:

CSVWriter writer = new CSVWriter(new FileWriter(getFullPathToTestFile(), true), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
String[] newLine = { "abc","def","ghi","jkl","mno","pqr" };
writer.writeNext(newLine);

这给了我:

abc、def、ghi、jkl、mno、pqr

CSVWriter writer = new CSVWriter(new FileWriter(getFullPathToTestFile(), true), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER);
String[] newLine = { "abc","def","ghi","\""+"jkl"+"\"","mno","pqr" };
writer.writeNext(newLine);

共有1个答案

伍成仁
2023-03-14

首先:我假设您使用的是com.opencsv.csvwriter,我参考的是http://opencsv.sourceforge.net/apidocs/com/opencsv/csvwriter.html的文档

示例数组中的语法错误。abc,def,..如果你不引用它们,它可能应该是变量,所以它应该是

String[] newLine = { "abc","def","ghi","\"jkl\"","mno","pqr" };

另外,从我看到的文档中

CSVWriter(Writer writer, char separator, char quotechar, char escapechar, String lineEnd)

您可以尝试将引号添加到源代码中,并禁用转义

CSVWriter writer = new CSVWriter(new FileWriter(getFullPathToTestFile(), true), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);

根据您的用例,这可能足够,但会中断,例如,如果您在任何值中有逗号。

作为替代方案,您可以编写自己的Writer实现,该实现接受CSVWriter的输出,并应用正则表达式在第n列添加引号。

CSVWriter writer = new CSVWriter(new RegexpReplaceWriter(new FileWriter(getFullPathToTestFile(), true)), CSVWriter.DEFAULT_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER, CSVWriter.DEFAULT_LINE_END);
 类似资料:
  • 问题内容: 我有这个: JSONLint表示这是完全有效的json。但是执行时出现错误。 但是,如果我将代码更改为: (请注意双反斜杠) 它可以工作,但是现在JSONLint表示。 有人可以帮助您了解这种行为吗? 问题答案: 有线格式和您必须在代码中编写的格式之间是有区别的。当您在代码中声明此代码时,您需要在文字中使用双-\,以便字符串获得一个反斜杠(否则,它将\\解释为一个转义序列,仅声明一个“

  • 我们使用protobuf v.3通过HTTP将消息从C#客户端传输到Java服务器。 message proto如下所示: 客户端和服务器都对字符串使用UTF-8字符编码。 当我们使用像“abc”这样的短字符串值时,一切都很好,但是当我们试图传输包含198个字符的字符串时,我们遇到了一个例外: 我们试图比较包含protobuf数据的字节数组,但没有找到解决方案。对于“AAA”字符串字节数组以以下字

  • 问题内容: 我知道可以在Java字符串中用双引号将符号放在双引号之前。但是,如果在字符串中经常使用双引号,那么是否有一种方法可以将字符串标记一次,因此不需要在每个双引号之前写上符号吗?(就像在C#中一样,可以将符号放在字符串之前)示例: 代替 问题答案: 你不能 但是,如果您懒得不能使用双引号,则可以使用一些技巧。例如: 输出:

  • 我正在尝试使用OpenCSV解析CSV文件。其中一列以YAML序列化格式存储数据,并被引用,因为其中可以包含逗号。它里面也有引号,所以它通过放两个引号来转义。我能够在Ruby中轻松解析这个文件,但使用OpenCSV我无法完全解析它。这是一个UTF-8编码的文件。 这是我的Java片段,它试图读取文件 这是此文件中的2行。第一行没有被正确解析,并且在处被拆分,因为我猜是转义双引号。

  • 问题内容: 我正在寻找一种在Java中编码字符串的方法,就像php的本机函数一样。 我试图使用JavaMails的MimeUtility库。但是我无法使该方法起作用,因为它采用OutputStream作为输入而不是字符串(我使用该函数转换了字符串)并输出了无法返回字符串的内容(我是Java noob :) 谁能给我提示如何编写将字符串转换为OutputStream并在编码后将结果输出为String

  • 问题内容: 我正在使用jQuery的$ .post调用,它返回的字符串带有引号。引号由json_encode行添加。如何停止添加引号?我的$ .post通话中是否缺少某些内容? 问题答案: 返回一个字符串。从文档中: 你需要调用上,这将解析JSON字符串,并把它变成一个对象: 但是,由于在调用中将字符串连接到,将记录的是,它将返回对象的字符串表示形式。因此,您将要登录一个单独的呼叫。像这样: