删除Null数组值

时间:2011-07-24 06:56:52

标签: java android arrays

我正在构建一个基于比较其他两个数组的数组。但是当我初始化我的第三个阵列时,我必须设置长度。但这使得我的数组在某些情况下具有空对象。在那里我可以删除数组中的空/ null位置。请参阅我目前的代码:

  private String[]  tags     = new String[] { "Mike", "Bob", "Tom", "Greg" };
  private boolean[] selected = new boolean[tags.length];
  public String[] selected_tags = new String[tags.length];

        for (int i = 0; i < tags.length; i++) {
            if (selected[i] == true){
               selected_tags[i] = tags[i];
            }
        }

我遗漏了构建Boolen selected []的复选框的代码。

如果我只选择2个标签,那么我的selected_tags []数组将是Mike, Bob, Null, Null

我需要把Null Null拿出来。提前谢谢!

4 个答案:

答案 0 :(得分:9)

您可以使用ArrayList而不是数组。

private String[]  tags     = new String[] { "Mike", "Bob", "Tom", "Greg" };
private boolean[] selected = new boolean[tags.length];
public List<String> selected_tags = new ArrayList<String>();

for (int i = 0; i < tags.length; i++) {
    if (selected[i] == true){
        selected_tags.add(tags[i]);
    } 
}

答案 1 :(得分:4)

不,您在创建后不能删除空值(并更改数组的长度)。你必须创建一个新的(或者例如使用如下图所示的ArrayList):

List<String> list = new ArrayList<String>();

for (int i = 0; i < tags.length; i++)
    if (selected[i] == true)
        list.add(tags[i]);

// Convert it to an array if needed:
selected_tags = list.toArray(new String[list.size()]);

答案 2 :(得分:2)

您应该使用ArrayList代替使用标准Java数组:它允许您向其添加元素,并根据需要自动增长列表。


基本上,您首先声明/实例化ArrayList,而不指定任何类型的大小:

public ArrayList<String> selected_tags = new ArrayList<String>();

然后,在你的循环中,你将使用add()方法将项​​添加到该ArrayList:

selected_tags.add(tags[i]);

答案 3 :(得分:2)

正如其他人所提到的,使用ArrayList会更容易。您甚至可以使用toArray函数从中获取常规数组。

不使用ArrayList,您必须先计算长度,不要包含null值。如你所见,这有点混乱:

int length = 0;
for( boolean b : selected ) if(b) ++length; // Count the "true"s

String[] selected_tags = new String[length];
for( int i = 0, j = 0; i < tags.length; i++ )
    if( selected[i] )
        selected_tags[j++] = tags[i];