2017-09-01 55 views
0

我試圖用這段代碼替換arraylist中的空值。我在我的xml文件的標籤中獲得空值。該標籤中的值來自數組列表。我想從標籤中刪除null,並將其替換爲任何內容。我的代碼是這樣的:在遍歷arraylist時刪除空值

for(String s:a.getList){ 
here I setting values in tag by create tag and than appending child nodess using DOM parser. 
} 

其中包含列表

輸出=對象是這樣的:

<value>1</value> 
<value>2</value> 
<value>null</value> 
<value>3</value> 
<value>4</value> 
<value>null</null> 

。 。 。而等

預期輸出:

<value>1</value> 
<value>2</value> 
<value/> 
<value>3</value> 
<value>4</value> 
<value/> 

空應該被刪除,標籤應該是這個樣子

代碼我想的是:

for(String s:a.list){ 
if(s.equals("null")){ 
s.replace("null",""); 
my code; 

} 

始終得到空指針異常,不知道這是否會運行輸出。 請幫助..

+2

嘗試,如果該條件(空== s || s.equals(「null」))如果你只檢查值,即(1,2,null ..) – Nidhi257

+0

已經與這兩個...不工作 – zaib7777

+0

你可以發佈插入代碼和錯誤在這裏 – Nidhi257

回答

1

由於String是不可變的,所以您不更新列表,您正在創建新的String實例。只需設定值你要如果當前值是"null"

for(int i = 0; i < list.size(); ++i){ 
    if("null".equals(list.get(i)){ 
     list.set(i, ""); 
    } 
} 

這種情況不會失敗null價值,但如果要替換這些,你需要添加條件,因爲就目前而言,它只會更新"null"

+0

這btw是[[ListIterator]](https://docs.oracle)的一個很好的用例。由於['ListIterator#set(E)'](https://docs.oracle.com/javase/7/docs/api/java)而導致的/ com/javase/7/docs/api/java/util/ListIterator.html) /util/ListIterator.html#set(E))。 – Izruo

+0

@Izruo事實上,我沒有使用它(在我的腦海裏,迭代器總是隻讀的)!如果您喜歡,歡迎您發佈它的答案! – AxelH

0

使其更清晰

public static void main(String... args) { 
    ArrayList<String> a = new ArrayList<String>(); 
    a.add("one"); 
    a.add(null); 
    a.add("two"); 
    a.removeAll(Collections.singleton(null)); 
    for(String value : a) { 
     System.out.println(value); 
    } 
} 

輸出

one 
two 
+0

「_爲了更好的理解_」? – AxelH

+0

希望我的java比我的英語好 – tomas

+0

'removeAll'很好,但它會成爲一個問題,因爲OP要刪除''null'',如果這些成爲''NULL'',不確定你能'removeAllIgnoreCase' sur有一個相當於lambda的) – AxelH

1

接近使用數組列表是從去年迭代首先,如果你想同時刪除的最佳方式。

for (int i = list.size()-1; i >= 0; i--) { 
     if ("null".equalsIgnoreCase(list.get(i))) { 
      list.remove(i); 
     } 
    } 

「空」 .equalsIgnoreCase(list.get(I))將避免空指針異常

,拆卸和印刷值

for (String str : abc) { 
     if ("null".equalsIgnoreCase(str)) { 
      System.out.println("<value/>"); 
     } else { 
      System.out.println("<value>"+str+"</value>"); 
     } 
    } 
+0

不幸的是,它仍然在預期的輸出中打印XML節點。 – AxelH

+0

@AxelH您能否給我一個arraylist值的示例,以及您期望的輸出是什麼。你的數組列表中的希望爲null是一個字符串。我的意思是「null」不爲null。如果它不是一個字符串,那麼你必須使用 null == lis.get(i)來刪除條件 –

+0

檢查OP的問題,這是...他是以XML格式的值打印他的列表。 (假設它將列表的內容添加到一個節點中,但是'null'應該輸出''而不是簡單地刪除它。 – AxelH