java - 在 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 语句的子句中使用pid
and 。而且我假设我的错误在这里的某个地方,因为这确实是我在将第二列数据添加到我的文本文件后弄乱的唯一代码部分:series
WHERE
String [] token = line.split("\t");
pid = token[0];
series = token[1];
解决方案
您可以使用split(String regex, int limit)
下面的正则表达式来分割一个或多个空格:
String [] token = line.split("\\s+");
+
量词表示一个或多个匹配。
推荐阅读
- javascript - 如何在wordpress的if/else条件下使用PHP/Javascript隐藏类?
- r - 使用 nflscrapR 抓取 2019 年数据时出错。刚开始收到
- python-3.x - 在 BeautifulSoup / Python 中,如何从结果集中提取单个元素?
- laravel - 419 抱歉,您的会话已过期。请刷新并重试。提交表单时出现此错误
- r - 错误:尝试在 For 循环中使用零长度变量名
- sql - 基于最小值分组时选择一条记录
- java - 如何在新方法中使用来自两种不同方法的变量?
- python - 使用 django-python3-ldap 更改 LDAP 密码加密
- javascript - 更新父组件状态时反应子组件不重新渲染
- javascript - Actionmethod 无法从 ajax post 获取参数中的双值