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

如何在读取CSV时删除双引号

谷玉韵
2023-03-14
public class CSVTeast {
  public static void main(String[] args) {

      CSVTeast obj = new CSVTeast();
        obj.run();

      }

      public void run() {

        String csvFile = "D:\\text.csv";
        BufferedReader br = null;
        String line = "";
        String cvsSplitBy = "~";

        try {

            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {

                    // use comma as separator

                String[] csvRead = line.split(cvsSplitBy);




                System.out.println("Value [date= " + csvRead[5] 
                                     + " , name=" + csvRead[9]+"]");

            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println("Done");
      }


}

输出为

Value [date= "POLICY_CHANGE_EFFECTIVE_DATE" , name="AGENCY_NAME"]

Value [date= "2014-04-01" , name="USI INSURANCE SERVICES]--this value stated with double qoutes but not end with same . 

预期输出

Value [date= POLICY_CHANGE_EFFECTIVE_DATE , name=AGENCY_NAME]

Value [date= 2014-04-01 , name=USI INSURANCE SERVICES] 

共有3个答案

蒙胤
2023-03-14

如果Qoutemark位于每个CSV行的开头,则可以执行以下操作:

csvRead[5].substring(1, csvRead[5].length()-1)

这将删除该特定字符串的第一个和最后一个字符。然后,您需要将结果存储在某处或打印出来。

司空丰
2023-03-14

有一个很好的Java CSV阅读器,可以帮你解决这个问题,http://opencsv.sourceforge.net/

如果您的项目是maven,那么它有一个maven包,否则您可以在那里下载JAR。

胡夕
2023-03-14

您可以尝试通过字符串传递值。replace()方法

所以你的代码是:

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

  CSVTeast obj = new CSVTeast();
     obj.run();
  }
  public void run() {
    String csvFile = "D:\\text.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = "~";
    try {
        br = new BufferedReader(new FileReader(csvFile));
        while ((line = br.readLine()) != null) {
            String[] csvRead = line.split(cvsSplitBy);
            System.out.println("Value [date= " + csvRead[5].replace("\"","") 
                                 + " , name=" + csvRead[9].replace("\"","")+"]");
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("Done");
  }
}
 类似资料:
  • 当我使用Spark DataSet加载csv文件时。我更喜欢清楚地指定模式。但是我发现有几行不符合我的模式。一列应该是双精度的,但有些行是非数值。是否可以轻松地从DataSet中过滤所有不符合我的模式的行? f、 csv: 我更喜欢“a”可以很容易地从我的数据集中过滤出来。谢谢!

  • 我想从字符串中删除双引号中的逗号/逗号。 即以下字符串 应输出: 我试过这个正则表达式: 但是如果双引号中有双引号,它就失败了。 另一个例子: 输出:

  • 我的本地文件夹中有一个csv文件。我想阅读它,删除一列,并替换同一文件夹中的文件。 实际样本数据: 样本数据中的预期数据: 在这种情况下,我想删除列LASTNAME。在Java中可以有效地完成吗?

  • 问题内容: 我想删除我的json_encode中的双引号,即我的代码: 我的结果是: 我也想删除“ id_posiciones”和“ device_version”的双引号。 我该怎么做的结果是: 问题答案: 如果最后在您的正则表达式中添加下划线,它将执行此操作。 我认为那正是preg_replace的目的。

  • 我对SqlAlchemy和Firebird DB是新手。 我可以直接使用DBeaver创建一个表: 但如果我尝试使用pyndas sqlalchemy执行同样的操作,我会得到一个错误: 问题是由引号

  • 问题内容: 我正在尝试使用pandas创建一个,但是当我将数据导出到它时,我得到了一个额外的列 因此,我的结果是: 但是,预期结果是: 问题答案: 您所看到的是索引列。刚刚设置: