[英]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.