我正在编写一个 Java 应用程序以将数据从 Oracle 导出到 csv 文件
但行上的某些数据可能如下所示:
可以使用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; }
可以指定特定的分隔符、引号符、转义符来避免你的单双引号混淆问题
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/...
在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 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配