迭代Excel值并与txt文件值匹配

时间:2018-08-13 18:11:30

标签: java apache-poi

我正在尝试读取已读取的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");
    }
}

3 个答案:

答案 0 :(得分:1)

您已尝试在for循环中读取文件。读取文件/头到达文件末尾后,BufferedReader始终返回null。即,在fori>=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");
    }
}