java - Java如何删除双引号文本限定符之间的双引号字符
问题描述
我有一个 csv 文件,其中每个字段(列标题除外)都有一个双引号文本限定符: field: "some value"
。但是,文件中的某些字段在值中有双引号;字段 2 :或字段 3 "25" TV"
:或字段4 "25" x 14" x 2""
:。"A"bcd"ef"g"
(我认为你说对了)。如果我有字段 2-4 中的数据,我的 java 文件处理失败,因为我指定双引号是字段上的文本限定符,并且看起来该行的字段太多。如何执行以下任一或所有操作:
- 从字段内删除双引号字符
- 用另一个值替换双引号字符
- 让我的 java 进程在字段中“忽略”或“跳过”双引号。
我对此文件的控制程度如何?该文件按原样提供,但我只需要来自文件中两个不同列的数据。我可以做任何我需要做的事情来获取这些数据。
解决方案
首先,如果它确实是一个 CSV 文件,您应该使用逗号将每一行分成几列。
一旦它在列中断开,如果我们确定该值应该以双引号 (") 开头和结尾,我们可以简单地删除所有双引号,然后重新应用开头和结尾的双引号。
String input = "\"hello\",\"goodbye Java \"the best\" language\", \"this is really \"\"\"bad\"";
String[] parsed = input.split(",");
String[] clean = new String[parsed.length];
int index = 0;
for (String value : parsed) {
clean[index] = "\"" + value.replace("\"", "") + "\"";
index++;
}
如果值中可能存在逗号,则应使用以下内容
String input = "\"hello\",\"goodbye,\" Java \"the best\" language\", \"this is really \"\"\"bad\"";
String[] parsed = input.split("\"\\s*,\\s*\"");
String[] clean = new String[parsed.length];
int index = 0;
for (String value : parsed) {
clean[index] = "\"" + value.replace("\"", "") + "\"";
index++;
}
}
请注意,如果 \"\s*,\s*\" 的序列存在于一个值中,则该记录将是不明确的。例如,如果它是一个两列文件,则输入记录“abc”、“def”、“ghi”可以是
值 1 = "abc","def" 值 2 = "ghi" 或值 1 = "abc" 值 2 = "def","ghi"
推荐阅读
- python - 如何做到这一点?
- mysql - 如何在 laravel 查询生成器中将 OR 子句放在 AND 子句之后?
- postgresql - 关于递归 SQL 查询、它们的性能和无限递归
- database - Jmeter无法连接到数据库(Postgres)
- coldfusion - 解码 HTML 和 Excel 问题
- python - Python 返回“str”对象没有属性的错误消息
- laravel - 我的应用程序的 Twiml xml 存储在哪里?
- python - 从数据框中制作适合特定特征的列表
- javascript - 如何排除 div 内的元素不受 div 函数的影响?
- c# - Winforms 数据库 Id 主键不断计数