为了账号安全,请及时绑定邮箱和手机立即绑定

java如何获取上一行arraylist的某个单元格

java如何获取上一行arraylist的某个单元格

摇曳的蔷薇 2021-12-22 16:08:41
我有这样的数组列表[111, 222, 333, 444, 555, 666, , ][1, 2, 3, 4, 5, 6, , ][11, 12, 13, 14, 15, 16, , ][a, s, d, f, g, h, , ]我想检查它什么时候找到'h',它会检查第一个单元格的前一行是否等于'11'到目前为止,我已经这样做了DataFormatter formatter = new DataFormatter();        String val = null;        for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {            Row r = sheet.getRow(rowNum);            ArrayList<String> al = new ArrayList<String>();            for (int i = 0; i <= r.getLastCellNum() + 1; i++) {                Cell cell = r.getCell(i);                val = formatter.formatCellValue(cell);                al.add(val);            }for (int t = 0; t < al.size(); t++) {    if (al.get(t).equals("h") && al.get(t + 1).equals("") && al.get(t + 2).equals("")) {                    if (al.get(rowNum - 1) != null) {                        if (al.get(rowNum - 1).contains("11")) {                            System.out.println("valid");                            continue;                        } else {                            System.out.println("invalid");                            continue;                        }                    } else {                        System.out.println("empty cell not exist ");                        continue;                    }                }            }        }输出 : invalid输出:valid如果我也将“1”更改为“2”,但不是 3、4、5、6,则结果相同有人可以向我解释一下吗?
查看完整描述

1 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

首先你的数据结构不好。我建议你创建一个ArrayList<ArrayList<String>>来保存你的数据。将每一行放入一个 ArrayList,然后将 ArrayList 添加到主 ArrayList。现在数据结构和你上面提到的一样。或者您可以选择二元数组,例如String[][] arr = new String[10][];.


您将行ArrayList<String> al = new ArrayList<String>();放入for loop, 意味着在每个循环中,您创建一个新的 ArrayList al,因此al每个循环中的数据都是空的。如果要al保留所有数据,则需要ArrayList<String> al = new ArrayList<String>();移出循环。


对于您的代码,when(al.get(t).equals("h") && al.get(t + 1).equals("") && al.get(t + 2).equals(""))为 true,rowNum 为 3,al 为[a, s, d, f, g, h, , ]al.get(rowNum - 1) 为“d”。


当(al.get(t).equals("16") && al.get(t + 1).equals("") && al.get(t + 2).equals(""))为真时,rowNum 为 2,al 为[11, 12, 13, 14, 15, 16, , ]al.get(rowNum -1) 为“12”。


此外,您不al.get(rowNum - 1).contains("11")应该使用 ,al.get(rowNum - 1).equals("11")而应该使用。


=================


for (int t = 0; t < mainArrayList.size(); t++) {

    ArrayList<String> row = mainArrayList.get(t);

    for (int i = 0; i < row.size(); i++) {

        if (row.get(i).equals("h") {

          // your code

        }

    }

}

row是工作表的每一行。您需要循环每一行以检查每个字符串是否与“h”相等。


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号