拆分字符串值未知次数

时间:2017-06-26 17:58:42

标签: java arrays

我正在尝试使用字符“,”上的用户分割填充的字段。但是,用户文本中可能会有不同数量的逗号。我将它用于JDBC,用户输入整个查询,我可以将他们选择的列保存在数组中。

例如,我想进行如下的简单拆分。

String usr = "SELECT NAME, DATE, AGE, PETS FROM CUSTOMER";
String[] parts = usr.split(",");
String[] part1 = parts[0];
String[] part2 = parts[1];
String[] part3 = parts[2];

只需要生成最少量的零件数组来保存字符串,而不是创建大量可能为空的数组,而不是预设数组量。有一种简单的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

请尝试以下解决方案:

private List<String> getColumnNames( String query, Connection conn )
{
    List<String> columnNames = new ArrayList<>();
    try
    {
        PreparedStatement ps = conn.prepareStatement(query);
        ResultSetMetaData meta = ps.getMetaData();
        if ( meta != null )
        {
            for ( int i = 1; i <= meta.getColumnCount(); i++ ) //columns start with "1" not "0" for ResultSetMetaData.
            {
                columnNames.add( meta.getColumnName(i) );
            }
        }
    }
    catch ( SQLException e )
    {
        e.printStackTrace();
    }

    return columnNames;
}

此代码的作用是 - 它获取有关ResultSet的元数据,在执行语句时返回。但是你赢了执行它。它只是检查查询的完整性,并获取查询中的列!

PreparedStatement已预编译,因此包含metadata关于执行查询时将返回的ResultSet,但正如我所说,您不需要执行 - 这里唯一的目的是进行健全性检查并获取列名称。

答案 1 :(得分:0)

"SELECT NAME, DATE, AGE, PETS FROM CUSTOMER"上分割","会导致

["SELECT NAME", " DATE", " AGE", " PETS FROM CUSTOMER"]

您不需要在第一次拆分后拆分每个元素。