首页 > 解决方案 > 在 Java 中解析制表符分隔的文本文件时出现错误 ArrayIndexOutOfBoundsException

问题描述

我有一个读取文本文件的脚本。然后在SQL WHERE子句中使用读入的文本从数据库返回数据SQL

这很好用,但我现在在我的文本文件中有 2 列数据,由 tabs 分隔。我想在我的WHERE子句中使用两列数据,但我得到了一个

ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1.

我假设它没有拆分我的选项卡式数据,并且我一生都无法弄清楚我做错了什么。

这是我的代码:

public class Find_ImagePaths {

    public static void main(String[] args) throws IOException, SQLException {
        Connection conn = DriverManager.getConnection(
            "jdbc:mysql://myServer/myTable?useSSL=false", "UserName", "Password");
            
            Statement stmt1 = conn.createStatement(); {
                        
            BufferedReader reader = new BufferedReader(new FileReader("c:\\ImageExport\\SeriesDates.txt"));
            @SuppressWarnings("unused")
            int Counter = 1;
            String line;
            String pid;
            String series;
            while ((line = reader.readLine()) != null) {
                
            @SuppressWarnings({ "resource", "unused" })
            Scanner scanner = new Scanner(line);
               
                String [] token = line.split("\t");
                pid = token[0];
                series = token[1];{
            
            ResultSet rs1 = stmt1.executeQuery("SELECT c.ClientID AS CID, sopi.PATHINSTORAGE, date_format(se.SeriesDate, '%Y-%m-%d') AS SeriesDate, sopi.VISITSUBGROUPVALUE as Type FROM client c LEFT JOIN Study st ON c.ID = st.CLIENT_ID LEFT JOIN Series se ON st.ID = se.STUDY_ID LEFT JOIN SOPINSTANCE sopi ON se.ID = sopi.SERIES_ID WHERE c.ClientID = '"+pid+"' AND date_format(se.SeriesDate, '%Y-%m-%d') = '"+series+"'");

            while (rs1.next() ) {
                BufferedWriter bw = null;
                bw = new BufferedWriter(new FileWriter("c:\\ImageExport\\PathInStorage.txt", true));

                String[] array = new String [4];

                array[0] = rs1.getString("PATHINSTORAGE");
                array[1] = rs1.getString("CID");
                if (rs1.wasNull()) 
                    array[1] = "";
                array[2] = rs1.getString("SeriesDate");
                if (rs1.wasNull()) 
                    array[2] = "";
                array[3] = rs1.getString("Type");
                if (rs1.wasNull()) 
                    array[3] = "";

                bw.write(array[0]);
                bw.write("\t");
                bw.write(array[1]);
                bw.write("\t");
                bw.write(array[2]);
                bw.write("\t");
                bw.write(array[3]);
                    bw.newLine();
                    bw.close();     
            }
        }
    }
    reader.close();
    conn.close();                   
}}}

我在我的 sql 语句的子句中使用pidand 。而且我假设我的错误在这里的某个地方,因为这确实是我在将第二列数据添加到我的文本文件后弄乱的唯一代码部分:seriesWHERE

 String [] token = line.split("\t");
 pid = token[0];
 series = token[1];

标签: javaarraysstringsplit

解决方案


您可以使用split(String regex, int limit)下面的正则表达式来分割一个或多个空格:

String [] token = line.split("\\s+");

+量词表示一个或多个匹配。


推荐阅读