如何将2D字符串数组减少一行?

时间:2015-03-05 16:21:19

标签: java arrays

我有一个由MySQL数据库的ResultSet填充的2D字符串数组。我需要一种方法,每次匹配一个值时将行数减少1。此过程仅运行一次/操作。

for(int i=0;i<editable.length;i++)
{
    for(int j=0;j<editable[i].length;j++)
    {
        if(editable[i][1].equals(selection))
        {
            while(!editable[i-1][j].equals(selection))
            {
                editable= new String[i-1][j];
            }
        }
    }
}

每次我尝试这个时,我都会得到一个Index out of bounds异常。此表用于稍后在应用程序中更新数据库的内容,因此名称需要保持相同以保持连续性。有没有人对我如何进行有任何建议?我不能使用收藏课程的任何部分,因为这是我工作场所的学术练习。

2 个答案:

答案 0 :(得分:1)

我认为username是您的一个表格列。

如果你想“更改”数组,即删除一个条目,就像你可能知道的那样,Java不能在不创建新数组的情况下做到这一点。有一个包含此功能的类,它叫做ArrayList,如果你想从结果中“删除”行,你可能想要使用List<String[]>而不是String[][]

如果您实际上根本不对该行感兴趣,您还可以在SQL语句中添加WHERE子句,以防止该行首先在ResultSet中返回。将PreparedStatement设为"SELECT * FROM Java_Test_Profiles WHERE username NOT LIKE ?"WHERE条款适用于您的情况。

如果您经常通过username访问Java中的数据,您可能真的想要使用Map<String, String[]>,其中值是整行,密钥是用户名。

您可以考虑使用class JavaTestProfile(我实际上称之为数据结构,但在Java中,技术上也是类),而不是String[]来表示行。您可能希望在持久层的帮助下自动生成该数据结构甚至相应的SQL。您可以查看 Spring Hibernate 等内容。

P.S:

table语句的错误变量名称。 stmt会好得多。特别是假设你有tabledbTable,那就更具误导性了:table是查询,dbTable是来自Java查询的数据。这些名字会暗示它是相反的。

rowNumb也是一个错误的变量名称,因为它意味着行号,这通常是不明确的。更好地使用rowCountcolumnS的情况相同,请更好地使用columnCount。或numberOfRowsnumberOfColumns,但人们可以明确理解。

P.P.S .: rowNumb() < 100中的条件while毫无意义,因为rowNumb在循环期间永远不会更新。它只是防止循环完全迭代,以防查询返回100行或更多行。也许这是有意的,但是为什么一遍又一遍地检查条件而不是放在if ()周围的while ()中会让人感到困惑。

答案 1 :(得分:0)

经过大量编辑和&#34;黑客攻击&#34;我的代码,我提出了这个解决方案:

String[][] tempTable=null;
int newArrayLength=editable.length-1;
Scanner scnInputst = new Scanner(System.in).useDelimiter("\\n");
String selection = scnInputst.next();
tempTable = new String[newArrayLength][9];

for(int rowCounter=0;rowCounter<newArrayLength;rowCounter++)
{
    if(!editable[rowCounter][1].equals(selection.trim())
    {
        temptable[newRows]=editable[rowCounter];
        newRows++;
    }
}