这是我收到的输出:
INSERT INTO [ J] VALUES ([J1, Sorter, Paris)
INSERT INTO [ J] VALUES (J2, Punch, Rome)
INSERT INTO [ J] VALUES (J3, Reader, Athens)
INSERT INTO [ J] VALUES (J4, Console, Athens)
INSERT INTO [ J] VALUES (J5, Collator, London)
INSERT INTO [ J] VALUES (J6, Termninal, Oslo)
INSERT INTO [ J] VALUES (J7, Tape, London])
正如你所看到的那样,我有一个[在开头,一个]在最后,我不知道是什么原因造成的?我怎么能删除它?我用.replace(“[]”,“”)尝试了正则表达式;在哪里我相信问题正在发生但无济于事。
插入代码:
if (state == 3||!tableLineScanner.hasNextLine()){
try{
Class.forName("org.sqlite.JDBC");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:sqlite:test.db");
//TODO Input values goes here
tableName =""+tableNames;
Statement stmt = conn.createStatement();
String query = tableValues + "";
ResultSet rs = stmt.executeQuery("SELECT * FROM "+ tableName);
ResultSetMetaData rsmd = rs.getMetaData();
query.replaceAll("[ ]","");
tableName =""+tableNames;
tableName.replaceAll("[ ]","");
String[] splittedOutput = query.split(", ");
int valuesOnLine = rsmd.getColumnCount();
for (int i = 0; i < splittedOutput.length; i++) {
if (i % valuesOnLine == 0) {
System.out.print("INSERT INTO " + tableName + " VALUES (");
}
System.out.print(splittedOutput[i]);
if (i % valuesOnLine == valuesOnLine - 1) {
System.out.println(")");
} else {
System.out.print(", ");
}
}
tableNames.clear();
tableValues.clear();
tableFields.clear();
}
catch (SQLException ex){
System.out.println("SQLException: " + ex.getMessage());
System.out.println("VendorError: " + ex.getErrorCode());
}
catch (ClassNotFoundException e){
e.printStackTrace();
}
}
答案 0 :(得分:1)
如果tableNames
中有多个元素,您将会遇到更多问题。你打算只使用第一个表名吗?或者使用所有这些来迭代tableNames
?现在,您正在将tableNames
转换为[element1, element2, element3]
形式的字符串,这几乎肯定不是您想要的。
如果您确实想要删除[]
个字符,则需要编写replaceAll("[\\[\\]]", "")
之类的内容,因为[]
是正则表达式中的特殊字符。
答案 1 :(得分:0)
通过将splittedOutput配置为:
,可以使用删除括号的解决方案System.out.print(splittedOutput[i].replaceAll("[\\[\\]]", ""));