Java从多维数组中删除行

时间:2015-02-27 11:05:20

标签: java arrays multidimensional-array

我有一个有趣的困境;

我从MySQL数据库中提取了一个String [] []。为简单起见,我使用Arrays.deepToString(<arrayname>)

打印了内容
[[1, gimley, <sanitised>, <sanitised>, <sanitised>, <sanitised>, 1994-10-11, <sanitised>, 2015-02-20 08:55:36.0], 
[2, Eris, Exotic, <sanitised>, <sanitised> <sanitised> <sanitised>, <sanitised>, 1996-02-15, <sanitised>, 2015-02-24 13:02:00.0], 
[3, Macca, Maccan, <sanitised>, <sanitised>, <sanitised>, 1996-11-11, University, Probably on Destiny, 2015-02-24 13:03:17.0], 
[4, <sanitised>, bacon, standard, <sanitised>, <sanitised>, 1996-03-12, <sanitised> or <sanitised>; depends, 2015-02-26 15:44:28.0]]

我的问题是: 如何删除数组数组中的一行,并将现有数据库替换为新数组数组的内容? 我知道这是不好的做法,因为我可以直接更新表格,但是这个练习要求我做这个方法。

1 个答案:

答案 0 :(得分:1)

你是说这样的意思吗?

public class TestClass {

public static final String[][] removeRow( String[][] source, String rowName ) {
    boolean rowFound = false;
    for ( int i = 0; i < source.length; i++ ) {
        if ( source[ i ][ 0 ].equals( rowName ) ) {
            rowFound = true;
        }
    }
    if ( !rowFound ) {
        return source;
    }

    String[][] result = new String[ source.length - 1][ source[ 0 ].length ];
    int resultIndex = 0;
    for ( int i = 0; i < source.length; i++ ) {
        if ( !source[ i ][ 0 ].equals( rowName ) ) {
            System.arraycopy( source[ i ], 0, result[ resultIndex ], 0, source[ i ].length );
            resultIndex++;
        } 

    }

    return result;
}

@Test
public void test() {
    String[][] source = { 
            { "1", "one", "I", "eins" }, 
            { "2", "two", "II", "zwei" }, 
            { "3", "three", "III", "drei" }, 
            { "4", "four", "IV", "vier" } 
    };

    String[][] result = removeRow( source, "2" );
    assertEquals( "{[1, one, I, eins][3, three, III, drei][4, four, IV, vier]}", toString( result ) );

    result = removeRow( source, "rowNotIn" );
    assertEquals( "{[1, one, I, eins][2, two, II, zwei][3, three, III, drei][4, four, IV, vier]}", toString( result ) );
}

private String toString( String[][] source ) {
    StringBuffer sb = new StringBuffer();
    sb.append( "{" );
    for ( int i = 0; i < source.length; i++ ) {
        sb.append( Arrays.toString( source[ i ] ) );
    }
    sb.append( "}" );
    return sb.toString();
}

}