在arraylist java中将行增加1

时间:2018-10-25 00:27:28

标签: java apache-poi

我希望我的代码工作的方式是,当迭代器找到字符串“ B”时,它将转到下一行以找到包含在下一行中的“ D”,如下所示:

|row 2 | A | B | C |
--------------------
|row 3 | D | E | E |

但是我现在面临的问题是该行不会移至下一行。请原谅我,因为我仍然对使用Java循环不满意。请帮我谢谢你。

        int rowStart = Math.min(15, sheet.getFirstRowNum());
        int rowEnd = Math.max(1400, sheet.getLastRowNum());

        // row
        for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
            Row r = sheet.getRow(rowNum);

            ArrayList<String> al = new ArrayList<String>();

            // cell
            for (int i = 0; i < r.getLastCellNum(); i++) {
                Cell cell = r.getCell(i);
                String stringcell = formatter.formatCellValue(cell);
                al.add(stringcell);
            }
            ListIterator<String> lt = al.listIterator();

            while(lt.hasNext()){
             element = lt.next();
                if (element.equals("B") {
                        rowNum++;

                        while (lt.hasNext()) {
                        element = lt.next();
                        if (element.equals("D")) {
                            System.out.println("found");
                            break;

                            } else {
                                System.out.println("false");
                                    break;
                                }
                            }


                            break;
                    }
         }
}

2 个答案:

答案 0 :(得分:1)

您的代码的总体轮廓可能是

String lookFor = "B";
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
    Row r = sheet.getRow(rowNum);

    boolean found = false;

    // cell
    for (int i = 0; i < r.getLastCellNum(); i++) {
        Cell cell = r.getCell(i);
        String stringcell = formatter.formatCellValue(cell);
        if (stringcell .equals(lookFor)) {
               rowNum++;
               lookFor = "D";
               found = true;
               break;
        }
    }    
    if (found) {
        System.out.println(lookFor  + " found");
    }        
    else {
        System.out.println(lookFor  + " not found");
    }
}

答案 1 :(得分:1)

如果我的理解正确,您想遍历电子表格的各行,在一行中寻找"B"。如果找到一个,则要在下一行查找"D"。这样的事情可能会解决问题。

boolean lookforD = false; foundD = false;
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
    Row r = sheet.getRow(rowNum);
    ArrayList<String> al = new ArrayList<String>();

    for (int i = 0; i < r.getLastCellNum(); i++) {
        Cell cell = r.getCell(i);
        String stringcell = formatter.formatCellValue(cell);
        al.add(stringcell);
    }
    ListIterator<String> lt = al.listIterator();
    while (lt.hasNext()) {
         element = lt.next();
         if (!lookForD) {
             if (element.equals("B")) {
                 lookForD = true;
                 break;
             }
         } else {
             if (element.equals("D")) {
                 foundD = true;
                 break;
             }
             if (!lt.hasNext()) {
                 lookForD = false;
             }
         }
     }
     if (foundD) {
         break;
     }
 }

这很粗糙,我只手工检查过。您需要确保它可以编译。此外,如果您在一行上找到"B",但在下一行上没有"D",那么我们应该在同一行上查找"B"。这段代码无法处理这种情况。