我正在尝试读取已读取的excel单元格值,然后尝试将excel单元格值与txt文件中存在的值进行匹配。
问题是,在执行以下代码时,它仅将excel单元格中的1675683811值与DATA.txt中的1675683811值匹配,然后对于其他三个值则不匹配。如何将这四个值与DATA.txt文件进行匹配。
在一个特定的excel单元格值中,如下所示:
String meid = "1675683811,2002199221,3893245956,9184020971";
并且txt文件中的值如下所示:
"1675683811","590483002",
"2002199221","876015525",
"3893245956","502139683",
"9184020971","1029595777",
以下是我的代码:
static int i = "";
File objFile = new File("C:\\DATA.txt");
BufferedReader br = new BufferedReader(new FileReader(objFile));
String st;
String[] memid =meid.split(",");
int matchValue = 0;
for(i = 0;i<memid.length;i++){
matchValue = 0;
System.out.println("Memberid is :"+memid[i]);
while ((st = br.readLine()) != null){
if (st.toString().contains(memid[i].toString())){
matchValue++;
} else {
}
}
if (matchValue != 0) {
objReport.setValidationMessageInReport("PASS" , memid[i] + " text Value is Matched");
} else {
// continue;
objReport.setValidationMessageInReport("FAIL" , memid[i] + " text Value is not Matched");
}
}
答案 0 :(得分:1)
您已尝试在for
循环中读取文件。读取文件/头到达文件末尾后,BufferedReader
始终返回null。即,在for
(i>=1
)循环的第一次迭代之后,while循环始终返回null
。我将在for
循环之外读取文件,将其存储在数组中,并检查您的excel行元素是否contains
是该字符串。
类似:
int i = 0;
File objFile = new File("C:\\DATA.txt");
BufferedReader br = new BufferedReader(new FileReader(objFile));
String st;
String strMemId = "1675683811,2002199221,3893245956,9184020972";
String[] memid =strMemId.split(",");
int matchValue = 0;
String fromFile = "";
while ((st = br.readLine()) != null)
{
fromFile += st;
}
for(i = 0;i<memid.length;i++)
{
matchValue = 0;
if (fromFile.contains(memid[i].toString())){
matchValue++;
}
System.out.println("Memberid is :"+memid[i]);
if (matchValue != 0) {
objReport.setValidationMessageInReport("PASS" , memid[i] + " text Value is Matched");
} else {
// continue;
objReport.setValidationMessageInReport("FAIL" , memid[i] + " text Value is not Matched");
}
}
br.close();
希望这有帮助:)
答案 1 :(得分:0)
在内部while
循环中,您逐行读取文件,直到到达文件末尾,一旦完成,将不再读取任何内容,因此当外部for
到达{{ 1}}循环第二次(等等)while
将始终返回null。
我建议您更改循环的位置,外循环从文件中读取下一行,而内部则对excel数组进行匹配。
答案 2 :(得分:0)
在使用while的for循环的第一次迭代中通过缓冲读取器读取文件时,最终将消耗整个文件。它指向文件的末尾...因此在下一次迭代中,它等于null,并且在while循环的第一遍失败。
while ((st = br.readLine()) != null){ // in the first iteration it finished reading the file
if (st.toString().contains(memid[i].toString())){
matchValue++;
} else {
}
这是您需要做的
static int i = "";
File objFile = new File("C:\\DATA.txt");
BufferedReader br = new BufferedReader(new FileReader(objFile));
String st;
String str="";
while ((st = br.readLine()) != null){
str+=st;
}
String[] memid =meid.split(",");
for(i = 0;i<memid.length;i++){
matchValue = 0;
System.out.println("Memberid is :"+memid[i]);
if (str.contains(memid[i].toString())) {
objReport.setValidationMessageInReport("PASS" , memid[i] + " text Value is Matched");
} else {
// continue;
objReport.setValidationMessageInReport("FAIL" , memid[i] + " text Value is not Matched");
}
}