2011-12-09 88 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())).