Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较.csv文件或字符串并找到相似性?_Java_String_Csv_Data Structures_Try Catch - Fatal编程技术网

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

Java 如何比较.csv文件或字符串并找到相似性?,java,string,csv,data-structures,try-catch,Java,String,Csv,Data Structures,Try Catch,我得到了一个带有逗号分隔值的.csv文件。它们按日期、价格、数量的顺序列为,“2016-03-23106.12999725703500”。参数已具有预设值,该值将由验证代码的程序确定。当程序输入随机日期时,例如:“2016-03-23”。代码应输出.csv文件中与日期相等的位置。当代码找到与输入相等的日期时,它应该只返回该行的第二列,即price作为double 到目前为止,我采取的步骤是: 1。读取包含.csv文件的参数。将.csv文件的第一列与日期参数进行比较,并检查是否相等。(.eqaul

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

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

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

2。假设包含字符串的参数也是一个.csv文件,并将其作为列进行比较。虽然这只是重现了第一个问题,我不知道如何读取两个.csv文件

问题:

我要退一张双人票。尽管我的代码设置了超出范围的任何值声明。当尝试转换它时:“类型Double中的方法
parseDouble(String)
不适用于参数
(String[])

如何精确定位.csv文件中的特定部分,不仅是列,还包括行。如果[1]和类似内容确定了列,则使用什么来确定行

我认为应该做什么:

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

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


使用java库解析csv文件 (这样你就不必重新发明轮子了)。 签出此jar文件

一旦在类路径中有了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...");
}

我认为您的问题可能是您正在读取股票文件的所有行,但实际上没有对它们做任何事情,因为您的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;
}

我们不允许使用图书馆。
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;
}