#java #arrays #string #split
#java #массивы #строка #разделение
Вопрос:
У меня есть скрипт, который считывает текстовый файл. Текст, который считывается, затем используется в SQL WHERE
предложении для возврата данных из SQL
базы данных.
Это отлично работает, но теперь у меня в текстовом файле есть 2 столбца данных, разделенных табуляциями. И я хочу использовать оба столбца данных в своем 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();
}}}
Я использую pid
and series
в WHERE
предложении моего sql-оператора. И я предполагаю, что моя ошибка где-то здесь, поскольку это действительно единственный раздел кода, с которым я возился после добавления второго столбца данных в мой текстовый файл:
String [] token = line.split("t");
pid = token[0];
series = token[1];
Комментарии:
1. Если он разделен табуляцией, то почему вы используете line.split(«@»); вместо line.split(» t») ?
2. Потому что я понятия не имею, что я делаю. Самоучка-сценарист. 🙁
3. Также я попробовал » t», и это не сработало. :-/
4. Тогда извините, я должен добавить, что, когда вы хотите разделить на t , поскольку аргумент split является регулярным выражением, вам нужно дважды экранировать (сначала экранировать, экранирует , чтобы конечная строка была табуляцией в регулярном выражении), т.е.: split(«\t»)
Ответ №1:
Вы можете использовать split(String regex, int limit)
метод для разделения на один или несколько пробелов, используя приведенное ниже регулярное выражение:
String [] token = line.split("\s ");
Квантификатор означает одно или несколько совпадений.