【问题标题】:Split the string with comma but not including double quotes on any number but only string用逗号分割字符串,但不包括任何数字的双引号,但只有字符串
【发布时间】:2020-07-16 14:16:29
【问题描述】:

我正在尝试拆分 String[],但是在尝试进行数据拆分时,数据未正确拆分。我的代码如下:

try (FileReader fr = new FileReader(path);
     BufferedReader br = new BufferedReader(fr))
     { int i;
    String line = null;
    System.out.println("Line value: "+line);
         br.readLine();
    for ( i=1;(line = br.readLine()) != null;i++) {
        String[] s = line.split(",");
    System.out.println("Value of row " + Float.parseFloat(datasetData.get((datasetData.size() - 1))[i])+" and column is: "+ s[1]);
    series2.add(Float.parseFloat(datasetData.get((datasetData.size() - 1))[i]), Double.parseDouble((s[1])));

由此产生的结果是:

"1594898820","0","","聚合",0.00,0.00,"N/A","N/A","N/A","N/A","N/A ","N/A","N/A","N/A","N/A","N/A","N/A","N/A",0,0,0, 0,0,0,0

但我需要它们没有双引号。像这样的:

1594898820,0,,聚合,0.00,0.00,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,不适用,不适用,不适用,0,0,0,0,0,0,0

因为我需要进一步使用这些数据,所以进行了一些比较,并且引用失败了。

【问题讨论】:

  • 为什么不在拆分前替换字符"?
  • 你为什么不使用java.nio 并且按照@kidnan1991的评论去做?
  • 是的,我添加了 ` String line1 = line.replace("\"", ""); String[] s = line1.split(",");` 它按预期工作. 感谢@kidnan1991 和@deHaar
  • @Sayen 没问题兄弟,很高兴帮助您解决问题

标签: java csv split


【解决方案1】:

一种天真的方法是替换:

  1. 起始引号,如果存在,带有一个空字符串
  2. 结束引号,后跟逗号,仅带逗号
  3. 开头的引号,前面有一个逗号,只有一个逗号
  4. 最后的引号,如果存在,带有一个空字符串

示例

import java.io.*;
import java.nio.file.*;

public class Parser {
    private static ClassLoader loader = Parser.class.getClassLoader();

    public static void main(String[] args) {
        try {
            fixFile(loader.getResourceAsStream("data.csv"), "fixed.csv");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void fixFile(InputStream stream, String filename) throws IOException {
        Files.write(Paths.get(filename), fixLines(stream).getBytes());
    }

    private static String fixLines(InputStream inputStream) throws IOException {
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(fixLine(line)).append(System.lineSeparator());
            }
        }
        return sb.toString();
    }

    private static String fixLine(String line) {
        return line.replaceFirst("^\"", "")
                .replaceAll("\",", ",")
                .replaceAll(",\"", ",")
                .replaceFirst("\"$", "");
    }
}

输入

"1594898820","0","","Aggregated",0.00,0.00,"N/A","N/A","N/A","N/A","N/A","N/A","N/A","N/A","N/A","N/A","N/A","N/A",0,0,0,0,0,0,0

输出

1594898820,0,,Aggregated,0.00,0.00,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,0,0,0,0,0,0,0

【讨论】:

  • 感谢分享另一种方法!
猜你喜欢
  • 2020-04-05
  • 2017-04-07
  • 1970-01-01
  • 2022-07-06
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多