zoukankan      html  css  js  c++  java
  • csv文本编辑引号问题

    今天发现一个csv的一个问题,csv工具类对于引号默认有特殊的处理。我希望写出来的结果是

    1,"1",1

    原来的代码是

    CsvWriter cw=new CsvWriter("test.csv", ',', Charset.forName("GBK"));
    String[] tsr=new String[]{"1",""1"","1"};
    cw.writeRecord(tsr);

    结果是

    1,"""1""",1

    多了2个引号,后面经过查询API(网址:http://javacsv.sourceforge.net/com/csvreader/CsvWriter.html)

    发现了一个方法

    CsvWriter cw=new CsvWriter("test.csv", ',', Charset.forName("GBK"));
    cw.setUseTextQualifier(false); String[] tsr=new String[]{"1",""1"","1"}; cw.writeRecord(tsr);

    结果对了:

    1,"1",1

    手动输出scv的默认配置:

                System.out.println(cw.getForceQualifier());
                System.out.println(cw.getTextQualifier());
                System.out.println(cw.getUseTextQualifier());

    结果:

    false
    "
    true

    (未看源码,以下全是猜测)
    也就是说,csv默认使用引号作为文本限制符,当设置getUseTextQualifier为true的时候,如果文本要输出这个限制符,则这个文本本身会被限制符包围,并且还有一个限制符会作为作为转义符出现

    下面使用程序验证下,我们把限制符改为“#”,然后试一下

    cw.setTextQualifier('#');
    cw.setUseTextQualifier(true);            
    String[] tsr=new String[]{"1","#1","1"};
    cw.writeRecord(tsr);

    结果为:

    1,###1#,1

    注意, "#1"只有前面有限制符,后面没有,但是结果却是  ###1#   ,说明第一个是限制符,第二个是转义,第三个是我们的,第四个是限制符

    接下来,如果我要的结果是:

    "1","1","1"

    那我需要在代码里都加上  " 吗?即

    String[] tsr=new String[]{""1"",""1"",""1""};

    答案是不需要。

    cw.getForceQualifier() 意思是是否强制输出限制符,默认是false,这里设置为true即可全部输出

    下面看代码:

    cw.setForceQualifier(true);
    cw.setTextQualifier('"');
    cw.setUseTextQualifier(false);
    String[] tsr=new String[]{"1",""1","1"};
    cw.writeRecord(tsr);
    

     输出结果是:

    "1","1","1"

    反过来设为默认false看看结果

    cw.setForceQualifier(false);
    cw.setTextQualifier('"');
    cw.setUseTextQualifier(false);
    String[] tsr=new String[]{"1",""1","1"};
    cw.writeRecord(tsr);

    1,"1,1








  • 相关阅读:
    类,对象和方法
    jmeter对接口测试入参进行MD5加密
    Jmeter配置代理进行录制
    MYSQL——having 和 where的区别
    MySQL
    Python——面试编程题
    mysql——面试题
    Vue——解决跨域请求问题
    Vue——axios网络的基本请求
    ES6 数组map(映射)、reduce(汇总)、filter(过滤器)、forEach(循环迭代)
  • 原文地址:https://www.cnblogs.com/andong2015/p/5361026.html
Copyright © 2011-2022 走看看