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

在Java中拆分包含额外逗号和引号的CSV文件

松桐
2023-03-14

我需要解析一个一列的CSV文件,它不仅有额外的逗号,而且一些名称还包括额外的引号。我已经看过了,并阅读了之前的其他问题,最好的答案之一是阿钦蒂亚·杰哈的答案。然而,这种解决方案似乎在我的情况下不起作用。一个例子是这个名字

ADAMS COUNTY SHERIFF "ADAMS COUNTY SHERIFF'S OFFICE, CO"

正在打印为:

ADAMS COUNTY SHERIFF 
"ADAMS COUNTY SHERIFF'S OFFICE, CO"

它在正确的地方分裂,并且正在处理额外的逗号,但它没有击中额外的引号,并且现在也在那里分裂,所以String csvSplitBy = ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"; 将无法工作。有人知道Java处理这个问题的另一种方法吗?其他人问这个问题的答案用其他语言,但我找不到任何,除了我链接的,关于Java。谢谢!

package csvdatacompareapplication;
import java.io.*;

public class CSVDataCompareApplication {
    public static void main(String[] args) {

        BufferedReader br = null;
        BufferedReader br2 = null;
        String customerListAllCustomers = "C:\\Users\\Desktop\\customerListAllCustomers.csv";
        String customerListToRemove = "C:\\Users\\Desktop\\customerListToRemove.csv";
        String line = "";
        String csvSplitBy = ",";

        try {
            br = new BufferedReader(new FileReader(customerListAllCustomers));
            while ((line = br.readLine()) != null) {
                // use comma as separator
                //String [] customersAll = line.split(csvSplitBy);
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
ADAMS COUNTY SHERIFF'S OFFICE, CO
ADAMSON POLICE PRODUCTS
ADAN DAVILA
ADAPT SECURE
ADDISON PD - MIKE VINCENT
ADDISON POLICE - IL
ADDISON PORTER
ADIN MCGARVIE
ADMIRAL FIRE & SAFETY
ADMON IRAMIYA
ADRIAN DANG
ADRIAN HUMPHRIES
ADRIAN KEPKA
ADRIAN SALDANA
ADRIAN SOLER
ADRIAN YORK
ADRIENNE BAKER
ADRIENNE MOOS
ADS INC.
ADS, INC

我更新了我的java代码,现在这是打印出来的

"ADAMS COUNTY SHERIFF'S OFFICE, CO"
ADAMSON POLICE PRODUCTS
ADAN DAVILA
ADAPT SECURE
ADDISON PD - MIKE VINCENT
ADDISON POLICE - IL
ADDISON PORTER
ADIN MCGARVIE
ADMIRAL FIRE & SAFETY
ADMON IRAMIYA
ADRIAN DANG
ADRIAN HUMPHRIES
ADRIAN KEPKA
ADRIAN SALDANA
ADRIAN SOLER
ADRIAN YORK
ADRIENNE BAKER
ADRIENNE MOOS
ADS INC.
"ADS, INC"

为什么要把引号放在里面?


共有1个答案

严嘉良
2023-03-14

感谢Andreas和Tamas Hegedus帮助您澄清问题!尝试:

        br = new BufferedReader(new FileReader(customerListAllCustomers));
        while ((line = br.readLine()) != null) {
            // one column, so don't need to use comma as separator
            String line2 = line.replaceAll("^\"","").replaceAll("\"$","").replaceAll("\\\"","\"");
            System.out.println(line2);

replaceAll调用带前导引号(^\“)和尾随引号(\“$),然后取消对其余引号的scape(\\\\”)。

 类似资料:
  • 问题内容: 我的程序从文件中读取一行。此行包含逗号分隔的文本,例如: 我希望拆分的结果是这样的: 如果使用,我将得到: 换句话说:子字符串中的逗号不是分隔符。该如何处理? 问题答案: 你可以尝试以下正则表达式: 这将分割字符串,,后跟偶数双引号。换句话说,它用双引号引起来的逗号分隔。如果你在字符串中使用了引号,则此方法将起作用。 说明: 你甚至可以在代码中使用正则表达式使用修饰符来键入此类内容。修

  • 我想拆分一个字符串基于逗号不包括一个在双引号,也如果有任何相邻的逗号,他们应该被视为单独的令牌 我可以使用正则表达式([^\“]*)\” 但如果有相邻的逗号,它就无法正确地标记。字符串示例 输出应该是 请帮忙

  • 我有一根绳子 我想用逗号分隔,但需要排除括号和引号内的逗号(单引号和双引号)。 这样地

  • 问题内容: 我正在读取一个基本的csv文件,其中这些列用逗号分隔,这些列名称分别为: 但是,主体列是一个字符串,可能包含逗号。显然,这会导致问题,并且熊猫抛出错误: 有没有一种方法可以告诉熊猫忽略特定列中的逗号,或者可以解决该问题? 问题答案: 想象一下,我们正在读取名为的数据框: 您可以做的一件事是使用以下命令在列中指定字符串的定界符: 在这种情况下,以逗号分隔的字符串将被视为总数,而不管它们之

  • 问题内容: 我的文字如下: 谁能告诉我我必须使用哪些正则表达式分度数才能获得以下结果: 我在这里阅读Sun教程,直到“ Matcher类的方法”为止,但我仍然茫然。谢谢! 如果是这样,那将很容易,但是不幸的是,事实并非如此。有任何想法吗? 问题答案: 您可以直接使用split()方法,如下所示: (请注意,这将返回长度为5的数组,第一个位置为空字符串) 或者,如果您想使用模式/匹配器,可以这样做:

  • 我在文本文件中有以下内容要导入ArrayList: 澳大利亚,2 加纳,4 中国,3 西班牙,1 我的ArrayList由来自另一个类Team的对象组成,该类具有TeamName和排名字段。我可以获取以下内容以将String和int导入团队名称,但我无法分离应该是团队排名的数字: 我猜我必须在该行的某个地方使用拆分,或者将字符串转换为整数??