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

如何使用opencsv读取包含“\”的字符串?

弘靖琪
2023-03-14

当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。

为了澄清我的问题,看起来是这样的:

csv文件

"A",       "B",        "C",       "D"
"value 1", "value 2",  "value 3", "value 4"
"value 5", "value 6\", "value 7", "value 8"

我的代码看起来像这样(不是真的,但它显示了我的问题):

String inFile = "in.csv";
CSVReader reader = new CSVReader(new FileReader(inFile));
String[] line;

while ((line = reader.readNext()) != null) {
    for (int i = 0; i < line.length(); i++) {
        System.out.println(i + " " + line[i]);
    }
}

我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成两个元素,如下面的输出所示。

1 A
2 B
3 C
4 D
1 value 1
2 value 2
3 value 3
4 value 4
1 value 5
2 value 6",value 7,value 8

我试图将读者更改为:

CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8"));

但是没有任何运气。

共有3个答案

越扬
2023-03-14

反斜杠用于转义",因为某些值可能包含一个"字符,如果没有反斜杠,您将无法包含该字符。

因此,如果您想使用\,您也需要使用\对其进行转义,就像在常规Java字符串中使用它一样。

"A",       "B",         "C",       "D"
"value 1", "value 2",   "value 3", "value 4"
"value 5", "value 6\\", "value 7", "value 8"

要么修改CSV文件,要么使用CSVReader中的另一个构造函数,从中可以选择转义字符

饶志
2023-03-14

更干净和推荐的解决方案是使用RFC4180Parser而不是默认的CSVParser

String csv = "come,csv,string";
RFC4180Parser rfc4180Parser = new RFC4180ParserBuilder().build();
CSVReader csvReader = new CSVReaderBuilder(new StringReader(csv)).withCSVParser(rfc4180Parser).build(); 

参考:https://sourceforge.net/p/opencsv/support-requests/50/

凌运恒
2023-03-14

可能会更改读取器构造函数中的转义字符?

CSVReader(new InputStreamReader(new FileInputStream(inFile)), ',', '"', '|') 

这是假设|没有在您的CSV文件中使用

 类似资料:
  • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

  • 问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包

  • 我使用OpenCSV进行CSV文件的读写。在I hsd安装早期版本的Java(即Java 6)之前,它工作得很好。安装完之后,我的代码就停止工作了: 线程“main”java.lang.UnsupportedClassVersionError:COM/OpenCSV/CSVReader:不支持Major.Minor版本51.0在java.lang.ClassLoader.DefineClass1(

  • 问题内容: 我正在尝试使用csv文件读取文件,但某些字段是包含逗号的字符串。字符串用引号引起来,但是numpy不能将引号识别为定义了单个字符串。例如,使用“ t.csv”中的数据: 编码 产生错误: ValueError:检测到一些错误!第2行(获得4列而不是3列) 我正在寻找的数据结构是: 查看文档,我看不到任何解决方案。有没有办法用numpy做到这一点,或者我只需要使用模块读入数据,然后将其转

  • 问题内容: 我正在尝试从shell脚本读取属性文件,该脚本包含一个句点(。)字符,如下所示: 我尝试在获取文件后解析文件,但由于键包含“。”,因此无法正常工作。字符,并且该值中也有空格。 我的属性文件始终位于脚本的同一目录中或/ usr / share / doc中的某个位置 问题答案: 由于(Bourne)Shell变量不能包含点,因此可以用下划线替换它们。阅读每一行,翻译。在_和评估的关键。

  • 问题内容: 我的应用程序中有一个奇怪的异常,我想记录它发生的时间,并包括完整的请求字符串(包括参数)。 当我尝试 我得到了请求字符串,但没有得到包含的参数?和&。 例: 我只看到 我可以把整个字符串放在某个地方吗? 问题答案: 参见HttpServletRequest#getQueryString() 如果需要整个字符串,则必须将请求url和查询字符串附加在一起,因为没有方法可以获取整个字符串。