Как получить определенную ячейку предыдущего ряда

sharky спросил: 07 октября 2018 в 12:05 в: java

У меня есть такой arraylist

[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

НО, когда я перехожу на этот :

for (int t = 0; t < al.size(); t++) {    if (al.get(t).equals("16") && al.get(t + 1).equals("") && al.get(t + 2).equals("")) {            if (al.get(rowNum - 1) != null) {                        if (al.get(rowNum - 1).contains("1")) {
                            System.out.println("valid");
                            continue;
                        } else {
                            System.out.println("invalid");
                            continue;
                        }
                    } else {
                        System.out.println("empty cell not exist ");
                        continue;
                    }
                }
            }

output: valid и тот же результат, если я тоже изменю "1" на "2", но не 3,4,5,6

кто-нибудь может мне объяснить?

ОБНОВЛЕНИЕ

Как и предполагалось, проблема была в моем архиве. Следовательно, теперь я изменяю это на это, но я застрял. Уместно ли обновлять здесь или мне следует задать новый вопрос?

ArrayList<ArrayList<String>> mainArrayList = new ArrayList<ArrayList<String>>();        ArrayList<String> al = new ArrayList<String>();        for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
            Row r = sheet.getRow(rowNum);            String val = null;
            for (int i = 0; i < r.getLastCellNum() + 1; i++) {
                Cell cell = r.getCell(i);
                val = formatter.formatCellValue(cell);
            }            al.add(val);
            mainArrayList.add(al);
            System.out.println(mainArrayList);
        }

output:

[[]]
[[, ], [, ]]
[[, , ], [, , ], [, , ]]
[[, , , ], [, , , ], [, , , ], [, , , ]]

Я полагаю, потому что я заявляю свой .

Я задал новый вопрос об ArrayList >

Как хранить данные из превзойти ArrayList >

ПОЛНЫЙ ОТВЕТ

Спасибо нашему другу Бежонду за помощь в решении этой проблемы. Вот полный код:

public static void main(String[] args) {
    try {
        FileInputStream file = new FileInputStream(new File("xx"));
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);        DataFormatter formatter = new DataFormatter();        ArrayList<ArrayList<String>> mainArrayList = new ArrayList<ArrayList<String>>();        ArrayList<String> al = null;        for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
            al = new ArrayList<String>();            String val = null;            Row r = sheet.getRow(rowNum);            for (int m = 0; m <= r.getLastCellNum() + 1; m++) {
                Cell cell = r.getCell(m);
                val = formatter.formatCellValue(cell);
                al.add(val);
            }
            mainArrayList.add(al);
        }        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("13") && row.get(i - 1).equals("12")) {
                    // your code                    ArrayList tempRow = mainArrayList.get(t - 1);                    if (tempRow.size() > 0) {                        if (tempRow.get(2).equals("3")) {
                            System.out.println("FOUND");
                            break;
                        }else {
                            System.out.print("nope");
                            continue;
                        }                    } else {
                        System.out.print("false");
                        continue;
                    }
                }
            }
        }    } catch (    Exception e) {
        e.printStackTrace();
    }
}

В этом коде, если вы сравните с предыдущим исходным кодом, я внес некоторые изменения в соответствии с рекомендациями ArrayList > mainArrayList = new ArrayList > (); .

и затем для проверки я проверяю, когда он нашел значение "13" и предыдущий индекс равен "12", он пойдет в предыдущую строку, чтобы проверить по индексу 2, является ли значение "3" существует или нет.


0 ответов