如何比较.csv文件或字符串并找到相似性?

时间:2017-03-24 22:56:57

标签: java string csv data-structures try-catch

我已经获得了一个逗号分隔值的.csv文件。它们按"2016-03-23,106.129997,25703500"的顺序列为"date,price,volume"。参数已经具有预设值,该预设值将由将验证代码的程序确定。当程序输入随机日期,例如:"2016-03-23"。代码应输出.csv文件中的位置,该位置等于日期。当代码找到一个等于输入的日期时,它应该只返回该行的第二列,即价格为double。

到目前为止,我采取的步骤是:

1。读取包含.csv文件的参数。将.csv文件的第一列与date参数进行比较,并检查是否相等。 (.eqauls)。虽然我知道是否要生成此代码,但它将返回整个.csv文件。

2. 假设包含字符串的参数也是.csv文件,并将它们按照列进行比较。虽然这只是重现了第一个问题,但我不确定如何阅读两个.csv文件。

问题:

  

我需要返回一个双倍。虽然我的代码设置任何超出范围的值声明。在尝试转换它时:" Double类型中的方法parseDouble(String)不适用于参数(String[])"

     

如何精确定位.csv文件中的特定部分,而不仅仅是列,还有行。如果[1]和类似的确定列用于确定行的内容?

public static double getPrice(String stockFileName, String date) {

    try {
        BufferedReader br = new BufferedReader(new FileReader(stockFileName));
        String line = "";
        String unparsedFile = "";
        Double Price;
        while ((line = br.readLine()) != null) {}
        br.close();

        String[] Ans = unparsedFile.split(",");
        for (String item: Ans) {
            if (Ans[1].equals(date)) {
                double aDouble = Double.parseDouble(Ans);
                return Ans;

            }
        }
    } catch(IOException ex) {
        System.out.println("Error");
    }

}

我认为应该做些什么:

  

创建一个for循环,生成.csv文件的每一行。将每一行转换为数组的字符串值,并让代码自行检查每一行(不生成整个列)是否等于日期。一旦确定该行,则返回该行的价格为[2]。

     

但是,如果参数已经设置为String stockFileName;我应该检查字符串中一行的[1]是否等于日期?如果是这样,只需返回该行的[2]?

2 个答案:

答案 0 :(得分:0)

使用java库解析csv文件 (这样你就不必重新发明轮子)。 检查此jar文件 https://sourceforge.net/projects/opencsv/

一旦你的类路径中有jar, 您可以遍历CSV文件的每一行 如下,并在列上查找匹配 有日期并使用匹配行的价格列。

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
    // nextLine[] is an array of values from the line
    System.out.println(nextLine[0] + nextLine[1] + "etc...");
}

答案 1 :(得分:0)

我认为你的问题可能是你正在阅读股票文件的所有行,但实际上并没有对它们做任何事情,因为你的while循环是空的。如果您需要行号,只需保留一个计数器,如果您需要整行,如果您需要对它进行任何操作,它将在返回之前处于变量行中

public static double  getPrice(String stockFileName, String date) {

  try {
    BufferedReader br = new BufferedReader(new FileReader(stockFileName));
    String line = "";
    String unparsedFile = "";
    Double Price;
    while ((line = br.readLine()) != null) {
      String[] Ans = line.split(",");
      for (String item : Ans){ 
        if(Ans[1].equals(date)){
          double aDouble = Double.parseDouble(Ans[2]);    
          return aDouble;
        }
      }
    }
    br.close();

  } catch (IOException ex) {
    System.out.println("Error"); 
  }
  return null;
}