簡體   English   中英

Java:希望忽略某些超出范圍的行

[英]Java: Looking to ignore certain lines that are out of bounds

目前,我正在研究一個程序,該程序分析文件並從每行中取出34-40個字符並將其放入數據庫的表中,但是,每次遇到少於34個字符的行時,程序吐出此錯誤:

警告:常規錯誤:字符串索引超出范圍:40

我仍然是Java的新手,因此需要幫助。 這是我的代碼的一部分:

try
            {
                fstream                             = new FileInputStream(filename);
                DataInputStream in                  = new DataInputStream(fstream);
                BufferedReader br                   = new BufferedReader(new InputStreamReader(in));
                PreparedStatement deleteFields      = null;
                String deleteTable                  = "DELETE FROM info WHERE VOLSER IS NOT NULL;";
                deleteFields                        = conn.prepareStatement(deleteTable);
                deleteFields.executeUpdate();
                deleteFields.close();
                logger.info(deleteTable);
                PreparedStatement updateFields      = null;
                String[] qmarks                     = new String[linenumber];

                //Adding data to the database
                for(int i = 0; i < linenumber; i++)
                {
                    String cust                 = in.readLine();
                    String subCust              = cust.substring(34,40);
                    qmarks[i]                   = subCust;
                    String updateString         = "REPLACE INTO info" + " (VOLSER) " + "VALUE ('" + (qmarks[i]) + "');";
                    logger.info(updateString);

                    try
                    {   
                        updateFields = conn.prepareStatement(updateString);
                        updateFields.executeUpdate();
                        updateFields.close();
                    }
                    catch (SQLException e)
                    {
                        logger.warning("Error:" + e.getMessage());
                    }
                }

該腳本每天都會運行,因此為了清除昨天的數據,我必須刪除表的所有內容,然后再次重新插入所有值。 刪除后,它將開始構建新內容的數組。 有兩種方法可以解決此問題,我正在尋求社區中關於最佳方法的反饋。 一種方法是我現在嘗試捕獲字符34-40的方式,在下面的示例中將產生A00000

TMSS0000N-02:00:30將音量A00000移至下一個

另一種方法是跳過所有其他行,僅查找其中包含“ MOVING VOLUME”的行(該行開頭的時間戳發生更改,因此我認為這種方式會更困難)。

在FOR循環中某個地方的簡單IF語句是否可以停止錯誤? 例如:

if (cust.length >= 34) 
{
     cust.substring(34,40);
}
else 
{
     cust.substring = "XXXXXX";
}

當您調用cust.substring(34,40); ,您需要確保cust.length >= 40否則它將拋出您得到的異常。 請參見javadoc以獲取public String substring(int beginIndex, int endIndex)

拋出IndexOutOfBoundsException-如果beginIndex為負,或者endIndex大於此String對象的長度,或者beginIndex大於endIndex。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM