我希望我的代码工作的方式是,当迭代器找到字符串“ 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;
}
}
}
答案 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"
。这段代码无法处理这种情况。