2017-09-01 2 views
0

Ich versuche mit diesem Code Nullwerte in Arraylist zu ersetzen. Ich erhalte Nullwerte in einem Tag in meiner XML-Datei. Die Werte in diesem Tag stammen von arraylist. Ich möchte null von Tag entfernen und nichts an Stelle davon setzen. Mein Code ist so etwas wie dieses:Um Nullwerte zu entfernen, während Arraylist durchlaufen

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

wobei a = Objekt, das Liste

Ausgang ist wie folgt enthält:

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

. . .und so weiter

Erwartete Ausgabe:

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

null entfernt werden sollte und Tag sollte so etwas wie dieses

Code aussehen ich versuche ist:

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

} 

immer immer null Zeigerausnahme und weiß nicht, ob dies ausgeführt wird, was ausgegeben wird. Bitte helfen Sie.

+2

versuchen, diese Bedingung if (null == s || s.equals ("null")) wenn Sie nur den Wert überprüfen, dh (1,2, null ..) – Nidhi257

+0

bereits mit diesen beiden getan ... funktioniert nicht – zaib7777

+0

können Sie den Einfüge-Code und Fehler hier – Nidhi257

Antwort

1

Sie aktualisieren die Liste nicht, Sie erstellen eine neue String Instanz seit String sind unveränderlich. Stellen Sie einfach den Wert wollen Sie, wenn der aktuelle Wert "null"

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

Die Bedingung fehl nicht für null Wert ist, aber wenn man diejenigen ersetzen möchten, müssen Sie die Bedingung hinzugefügt werden, da jetzt, wird es nur Aktualisierung "null".

+0

Dies ist übrigens ein netter Anwendungsfall für einen [ListIterator] (https://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html) wegen ['ListIterator # set (E)'] (https://docs.oracle.com/javase/7/docs/api/java /util/ListIterator.html#set (E)). – Izruo

+0

@Izruo es ist tatsächlich, ich benutze es nicht genug (in meinem Kopf, Iterator sind immer schreibgeschützt)! Sie können gerne eine Antwort schreiben, wenn Sie möchten! – AxelH

0

Um es deutlicher zu machen

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); 
    } 
} 

Ausgabe

one 
two 
+0

"_For besser verstehen_"? – AxelH

+0

hoffe mein Java ist besser als mein Englisch – tomas

+0

'removeAll' ist nett, aber es wird ein Problem werden, da OP" 'null" 'entfernen möchten, wenn diese' "NULL" 'werden, nicht sicher, dass Sie' removeAllIgnoreCase' (nicht Sur gibt es ein Äquivalent für Lambda) – AxelH

1

Der beste Weg, mit Array-Liste zu nähern Iterierte von den letzten, wenn Sie zuerst gleichzeitig entfernen möchten.

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

"null" .equalsIgnoreCase (list.get (i)) wird

Null-Zeiger Ausnahme vermeiden Zum Entfernen und Druckwert

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

Leider druckt es immer noch einen XML-Knoten in der erwarteten Ausgabe. – AxelH

+0

@AxelH Könnten Sie mir bitte ein Beispiel für Arraylist Werte geben und was ist Ihre erwartete Ausgabe. Hoffnung Null in Ihrer Arraylist kommt als eine Schnur. Ich meine "null" nicht null. Wenn es keine Zeichenkette ist, dann müssen Sie null == lis.get (i) zum Entfernen der Bedingung –

+0

OP-Frage für das überprüfen ... Er wird printint seine Liste in einem XML-formatierten Wert. (Angenommen, es fügt den Inhalt der Liste in einem Knoten hinzu. Aber ein 'null' sollte '' ausgeben, nicht einfach entfernen. – AxelH

Verwandte Themen