将Split元素分组为自己的独立数组

时间:2015-02-16 05:57:55

标签: java arrays arraylist syntax split

这是来自.txt文件的数据:

  

** S12 * * T0 0889 * B * 99 * N1C0〜** S12 * * T0 0880 * B * 99 * N1C0〜

这是我从.txt文件中读取数据的代码:

{
            in = new BufferedReader(new FileReader("2.txt"));
            String read = null;
            while ((read = in.readLine()) != null) {
            read = in.readLine();
            String[] splited = read.split("\\*+");
            PreparedStatement ps = null;
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//Data Source Driver
            Connection con=DriverManager.getConnection("jdbc:odbc:testing");//Data Connection
            for (String part : splited){    
                    ps=con.prepareStatement("insert into testing (d3)values('"+part+"')");//inserting data
                    System.out.println(part);//printing inserted data
                    System.out.println("inserted");//insertion confirmation
                    ps.executeUpdate();
                }

从我的代码中我已经能够在“*”之间拆分数据并将其存储在一个数组中(拆分)。因此在数据库中,只插入了一列。

“*”之间的数据属于数据库中的单独列。

  

问题1:   我需要首先在“〜”之间分隔数据,然后在“*”之间分隔数据。   问题2:   我需要将分离的数据分组到数组中,以便以后可以插入到数据库中(每个数据在数据库中都有自己的列)。

     

预期输出:在数据库中(ms-Access)

| d1 | d2 | d3 | d4 | d5 |< - 列

S12 | T0 | S12 | B | 99 | N1C0 |< - 插入元素

2 个答案:

答案 0 :(得分:0)

这样的事情:

public class Answer28535326 {

private static String input = "**S12*T0*0889*B*99*N1C0~**S12*T0*0880*B*99*N1C0~";

public static void main(String[] args) 
{
    String[] records = input.split("~");
    for (String record : records)
    {
        System.out.println(record);
        StringTokenizer tokenizer = new StringTokenizer(record, "*", false);

        while(tokenizer.hasMoreTokens())
        {
            System.out.println(tokenizer.nextToken());
        }

        System.out.println("");
    }       
}

}

答案 1 :(得分:0)

尝试批量添加

public class Answer28535326 {

  private static void addRows(PreparedStatement ps, String line) throws SQLException {
    String[] records = line.split("~");
    for (String record : records) {
      String[] values = record.replaceAll("^\\*+", "").split("\\*+");
      for (int i = 0; i < values.length; i++) {
        ps.setString(i + 1, values[i]);
      }
      ps.addBatch();
    }
  }

  public static void main(String[] args) throws Exception {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// Data Source Driver
    try ( Connection con = DriverManager.getConnection("jdbc:odbc:testing") ) {
      try ( PreparedStatement ps = con.prepareStatement("insert into testing (d1, d2, d3, d4, d5, d6) values(?, ?, ?, ?, ?, ?)") ) {
        try (BufferedReader in = new BufferedReader(new FileReader("2.txt"))) {
          String read = null;
          while ((read = in.readLine()) != null) {
            read = in.readLine();
            addRows(ps, read);
          }
          ps.executeBatch();
        }
      }
    }
  }
}

编辑:按要求说明

  1. 原始代码是它将每一列作为新行插入 数据库。 解决方案是使用准备好的语句 所有表格的列值的占位符

  2. 由于每行可能有1+条记录添加了一个方法 每行处理多个记录并将其作为批处理添加