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

java - Java中如何在导出CSV时,同时使用单引号及双引号?

马安邦
2023-10-23

我正在编写一个 Java 应用程序以将数据从 Oracle 导出到 csv 文件

但行上的某些数据可能如下所示:
image.png

共有3个答案

陶超
2023-10-23

可以使用opencsv来处理
通过maven添加

        <dependency>            <groupId>org.ow2.util.bundles</groupId>            <artifactId>opencsv-2.1</artifactId>            <version>1.0.0</version>        </dependency>

使用时通过构造CSVWriter来指定分隔符和转义符

    public CSVWriter(Writer writer, char separator, char quotechar, char escapechar, String lineEnd) {        this.rawWriter = writer;        this.pw = new PrintWriter(writer);        this.separator = separator;        this.quotechar = quotechar;        this.escapechar = escapechar;        this.lineEnd = lineEnd;    }

可以指定特定的分隔符、引号符、转义符来避免你的单双引号混淆问题

谷梁德容
2023-10-23

CSV有相关的组件可以进行处理。但也有一个简单的做法,通过Excel组件可以免去CSV处理的相关细节。
只需要关注Java中如何转义双引号就行了。

public void ExportCSV() {    Workbook wb = new Workbook();    IWorksheet sheet = wb.getWorksheets().get(0);    sheet.getRange("A1").setValue(123);    sheet.getRange("B1").setValue("葡萄");    sheet.getRange("C1").setValue("苹果");    sheet.getRange("D1").setValue("ABC");    sheet.getRange("E1").setValue("我说:\"你把'苹果'给我\"");    wb.save("output/export.csv");}

结果:
123,葡萄,苹果,ABC,"我说:""你把'苹果'给我"""
参考资料:https://demo.grapecity.com.cn/documents-api-excel-java/demos/...

阴阳
2023-10-23

在Java中导出CSV时,同时使用单引号和双引号可能会导致解析问题,因为CSV格式通常使用双引号来引用包含特殊字符(如逗号、换行符等)的文本。如果你需要在CSV中同时使用单引号和双引号,一种解决方案是在内部使用单引号来引用包含特殊字符的文本,然后在外部使用双引号来引用整个单元格。

以下是一个示例代码片段,演示如何在Java中实现这种导出:

import java.io.*;import java.nio.file.*;public class ExportCSV {    public static void main(String[] args) {        String csvFile = "/path/to/your/file.csv";        String line = "";        String csvSplitBy = ",";        try (BufferedWriter bw = Files.newBufferedWriter(Paths.get(csvFile))) {            // 这里是示例数据,实际应用中,你需要从Oracle数据库或其他数据源获取数据            String[][] data = {                {"Name", "Email", "Phone"},                {"John Doe", "john.doe@example.com", "1234567890"},                {"Jane Doe", "jane.doe@example.com", "0987654321"}            };            for (String[] row : data) {                for (int i = 0; i < row.length; i++) {                    // 如果该单元格包含特殊字符(如双引号或逗号),则在内部使用单引号引用,在外部使用双引号引用                    if (row[i].contains(",") || row[i].contains("\"")) {                        row[i] = "\"" + row[i].replace(",", "\",\"").replace("\"", "\"\"") + "\"";                    }                }                line += String.join(csvSplitBy, row) + "\n";            }            bw.write(line);        } catch (IOException e) {            e.printStackTrace();        }    }}

这段代码首先检查每个单元格是否包含特殊字符(如逗号或双引号)。如果单元格包含这些字符,它将使用单引号来包围该单元格的内容,然后在外部使用双引号来包围整个行。这样可以确保CSV文件正确解析。

 类似资料:
  • 问题内容: 我正在尝试学习编写查询的最佳方法。我也了解保持一致的重要性。到现在为止,我在没有任何实际考虑的情况下随机使用单引号,双引号和反引号。 例: 另外,在上述例子中,考虑到,,等可以是变量。 这是什么标准?你是做什么? 我已经在这里阅读了大约20分钟的类似问题的答案,但是似乎没有确切的答案。 问题答案: 反引号用于表和列标识符,但是仅当标识符是MySQL保留关键字时,或者当标识符包含空格字符

  • 问题内容: 我正在读取CSV文件,并且有一些值,例如 将文件读取为并转换后,我将文件内容分割为:。 在迭代字符串时,我得到以下值: 如何将两个双引号替换为像这样的“双”的单双 这是我的代码:- 问题答案: 使用。 http://ideone.com/xPQqL

  • 问题内容: 我正在编写一个Java应用程序以将数据从Oracle导出到CSV文件 不幸的是,数据的内容可能非常棘手。分隔符仍然是逗号,但连续的一些数据可能是这样的: 因此,这是该列上的字符串之一: 我说:“我是5‘10”。 别开玩笑了,我需要在Java生成的CSV文件中的excel或开放式办公室中显示上述注释,而又不能妥协,并且当然不能弄乱其他常规的转义符情况(即,常规的双引号和元组中的常规逗号)

  • 输出为 预期输出

  • 问题内容: 与 我看到越来越多的JavaScript库在处理字符串时使用单引号。为何一个使用另一个原因?我认为它们几乎可以互换。 问题答案: 在不同的库中使用单一或双重的最可能原因是程序员的偏爱和/或API一致性。除了保持一致之外,请使用最适合该字符串的那个。 使用其他类型的引号作为文字: 这可能会变得复杂: ES6中的另一个新选项是使用以下字符的Template文字: 模板文字为以下内容提供了一

  • 问题内容: 如何使用PHP 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配