2017-09-01 56 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