在 ArrayList Java 中将行增加 1



我希望我的代码如何工作是当迭代器找到字符串"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;
}
}
}

代码的一般大纲可以是

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");
}
}

如果我理解正确,您想遍历电子表格的行以查找行上的"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"。此代码不处理这种情况。

最新更新