Java:想要忽略某些超出范围的行

Ric*_*d S 0 java arrays

目前我正在研究一个程序,它解析一个文件并从每行中取出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());
                    }
                }
Run Code Online (Sandbox Code Playgroud)

这个脚本每天都会运行,所以为了清除昨天的数据,我必须删除表中的所有内容并重新重新插入所有值.删除后,它会开始构建一个新内容数组.我可以通过两种方式来解决这个问题,我正在寻找社区的反馈意见.一种方法是我现在正在做的方式并尝试捕获34-40字符,在下面的示例中将产生A00000

TMSS0000N-02:00:30将A00000卷移至NEXT

另一种方法是跳过所有其他行,只找到其中​​有"MOVING VOLUME"的行[行开头的时间戳改变,所以我想这样会更难].

FOR循环中某处的简单IF语句会阻止错误吗?例如:

if (cust.length >= 34) 
{
     cust.substring(34,40);
}
else 
{
     cust.substring = "XXXXXX";
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 6

当你打电话时cust.substring(34,40);,你需要确保它cust.length >= 40或它会抛出你得到的异常.请参阅javadocpublic String substring(int beginIndex, int endIndex):

抛出IndexOutOfBoundsException - 如果beginIndex为负数,或者endIndex大于此String对象的长度,或者beginIndex大于endIndex.