1

私はApache POIで作業しており、このコードを使用しています:

private void remove() {
    HSSFWorkbook wb = null;
    HSSFSheet sheet = null;
    try {
        FileInputStream is = new FileInputStream("C:/juni.xls");
        wb = new HSSFWorkbook(is);
        sheet = wb.getSheetAt(0);
        for (Row row : sheet) {
            for (Cell cell : row) {
                if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    if (cell.getRichStringCellValue().getString().trim().contains("POST")) {
                        row_count_post_1 = row.getRowNum();
                        DashBoard.txt.setText("Processed the STRING \"POST\" on Row#" + row_count_post_1);
                        HSSFRow removingRow = sheet.getRow(row_count_post_1);
                        if (removingRow != null) {
                            sheet.removeRow(removingRow);
                        }
                        int lastIndex = sheet.getLastRowNum();
                        sheet.shiftRows(row_count_post_1 + 1, lastIndex, -1);
                    } else {
                        break;
                    }////////////want to break from here;
                }
            }
        }
    } catch (Exception e) {
        //do catch for no exception
    }
}

if問題は、ステートメントが機能しなくなったときにループから抜け出したいということです。my を使用しなければ、すべて正常に動作していますelse。実際、このコードが文字列を見つけられない場合は停止する必要がありますが、私の場合、else は突然 if で機能し、この場合は 1 回の反復のみが行われます。私が間違っていることを教えてください。全体的なヘルプではなくヒントが必要です。前もって感謝します

4

4 に答える 4

2

break外側のループのラベルで使用できます。

@ jon-skeetの 回答またはjavadocのこの例をご覧ください

于 2013-06-24T08:32:56.197 に答える
2

あなたの質問は不明ですが、それを調べてください:

private void remove(){
    HSSFWorkbook wb = null;
    HSSFSheet sheet=null;

    try {

        FileInputStream is = new FileInputStream("C:/juni.xls");

        wb = new HSSFWorkbook(is);
        sheet = wb.getSheetAt(0);
        //Tagging the loops
        OuterLoop : for (Row row: sheet) {
            InnerLoop : for (Cell cell: row) {

                if (cell.getCellType() == Cell.CELL_TYPE_STRING) {

                    if (cell.getRichStringCellValue().getString().trim().contains("POST")) {

                        row_count_post_1 = row.getRowNum();

                        DashBoard.txt.setText("Processed the STRING \"POST\" on Row#" + row_count_post_1);
                        HSSFRow removingRow = sheet.getRow(row_count_post_1);

                        if (removingRow != null) {
                            sheet.removeRow(removingRow);
                        }
                        int lastIndex = sheet.getLastRowNum();
                        sheet.shiftRows(row_count_post_1 + 1, lastIndex, -1);
                    } else {
                        break InnerLoop; // OR break OuterLoop;
                    } ////////////want to break from here;
                }
            }
        }
    } catch (Exception e) {
        //do catch for no exception
    }
}
于 2013-06-24T08:30:07.980 に答える
1

最初のループの終了後はコードがないのでbreakreturn.

} else {
    return;
}

ラベルとブレークツーラベルは有効な構文ですが、そのようなフロー制御は控えたいと思います。Dijkstra によると、コードのバグの数はgoto ステートメントの数に比例します(このブレークはそのバージョンです)。私が言いたいのは、気をつけてください。同様のフロー制御が必要な場合は、フラグを使用して実装してみてください。

于 2013-06-24T08:32:23.117 に答える
0

まず、ループに Iterator を使用してください (参照 : http://viralpatel.net/blogs/java-read-write-excel-file-apache-poi/を参照) 。

2番目:ループを停止するには、このようにする必要がある場合があります。

private void remove() {
    HSSFWorkbook wb = null;
    HSSFSheet sheet = null;
    try {
        FileInputStream is = new FileInputStream("C:/juni.xls");
        wb = new HSSFWorkbook(is);
        sheet = wb.getSheetAt(0);
        for (Row row : sheet) {
            boolean stop = false;
            for (Cell cell : row) {
                if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    if (cell.getRichStringCellValue().getString().trim().contains("POST")) {
                        row_count_post_1 = row.getRowNum();
                        DashBoard.txt.setText("Processed the STRING \"POST\" on Row#" + row_count_post_1);
                        HSSFRow removingRow = sheet.getRow(row_count_post_1);
                        if (removingRow != null) {
                            sheet.removeRow(removingRow);
                        }
                        int lastIndex = sheet.getLastRowNum();
                        sheet.shiftRows(row_count_post_1 + 1, lastIndex, -1);
                    } else {
                        stop = true;
                        break;
                    }
                }
                if (stop) {
                    break;
                }
            }
        }
    } catch (Exception e) {
        //do catch for no exception
    }
}
于 2013-06-24T08:30:51.547 に答える