我正在构建一个基于比较其他两个数组的数组。但是当我初始化我的第三个阵列时,我必须设置长度。但这使得我的数组在某些情况下具有空对象。在那里我可以删除数组中的空/ 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拿出来。提前谢谢!
答案 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];