2011-12-09 81 views
0

我声明一个字符串数组为:字符串[]长度计数

String[] items = new String[10]; 
items[0] = "item1"; 
items[1] = "item2"; 

如何找到项长度以高效的方式,它仅包含2个元素。 items.length返回10.

我正在运行一个已经运行到其长度的循环。我想要这样的代码,而不增加新的代码/循环来计算非空元素的数量。我能与items.length

for (int i = 0; i < items.length; i++) { 
... 
} 

回答

8

号代替你将需要循环,看看有多少非null元素有。

考虑使用例如一个ArrayList<String>而不是原始数组。

UPDATE

要回答你的问题的新的组成部分,你的循环可以成为:

for (int i = 0; (i < items.length) && (items[i] != null); i++) { 
    ... 
} 
+0

问题修改 –

+0

@imrantariq:Oli的答案仍然与您的问题的第二部分相关。 – AusCBloke

+0

@imran:查看我更新的答案。 –

1

这是10已经它只是对象的8都设置为null,所以你可以做以下

int count = 0 ; 
if(items!=null){ 
    for(String str : items){ 
    if(str != null){ 
     count ++; 
    } 
    } 
} 
+0

问题修改 –

+0

不,没有空值。 Arrey不使用清空的内存空间。如果你想在那里找到它们,你需要在那里设置空值。 –

+0

@El':这是不正确的。 –

2

为什么不使用集合:

Vector <String> items; 
items.add("item1"); 
items.add("item2"); 

int length = items.size(); 
+0

问题修改 –

0

您需要迭代并检查null。

int count = 0; 
for(int i = 0; i < items.length; i++){ 
if(items[i] != null){ 
    count++; 
    } 
} 

计数会给占用元素

+0

问题修改 –

+0

@EI您可以尝试'String [] items = new String [10];'并打印数组中的所有项目。你会看到空。那么你为什么说没有空! –

0

考虑到修改的问题,你完全可以什么都不做数。没有任何属性可以让您计算非空元素,因此您要么采用另一个集合,要么检查每个值为null。

0

我觉得可能这将帮助ü

public class T1 { 
    public static void main(String[] args) { 
     String[] items = new String[10]; 
     items[0] = "item1"; 
     items[1] = "item2";  
     System.out.println(getActualSize(items)); 

    } 

    public static int getActualSize(String[] items) 
    { 
     int size=0; 
     for(int i=0;i<items.length;i++) 
     { 

      if(items[i]!=null) 
      { 
       size=size+1; 
      } 
     } 
     return size; 

    } 
} 
0

要找到一些数组/集合中的所有非空元素(不在数组的开头neccesary),您可以使用优雅guava解决方案: Iterables.size(Iterables.filter(items, Predicates.notNull())).