Java 如何比较.csv文件或字符串并找到相似性?
我得到了一个带有逗号分隔值的.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
“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;
}