2017-11-09 1 views
-6

ich jede Zeile aus einer Datei lesen möchten, und speichern Sie jede Zeile in ein Array von StringsWas ist mit diesem Code falsch? hält Druck null

while ((line = br.readLine()) != null) { 

      int i = 0; 

      String[] sArray = new String[line.length()]; 
      sArray[i] += line; 
      System.out.println(sArray[i]); 

        i++; 
     } 

Ausgang:

nullKNZAVM 
nullCPKCCA 
nullKMUAXP 

, warum es vor jedem Satz von Buchstaben null druckt.

+1

Wie denken Sie, dass dieser Code funktioniert? Was meinst du? String [] sArray = new String [line.length()]; tut es in jeder Iteration? Was passiert damit nach der Iteration? – Pshemo

+0

do *** System.out.println (Zeile) *** statt –

+0

do 'sArray [i] = Zeile;' stattdessen; sArray [i] 's Standard-String-Wert ist null, deshalb Null wird ausgedruckt –

Antwort

2

Warum gibt es Null vor jedem Satz von Buchstaben ??

Sie tun dies:

String[] sArray = new String[line.length()]; 
sArray[i] += line; 

so erstellen Sie ein Array mit einer Größe von line.length() Elemente, aber alle diese Elemente nicht initialisiert.jetzt, da String ein Objekt ist der Standardwert eines initialisiert nicht null so ist jedes Element im Array ist null

tun sArray[i] += line; die gleiche wie concatenate null auf der Linie ...

1

Aufgrund dieser Linie:

sArray[i] += line; 

Da die Elemente sind null (wie in undefinierte oder unitialised), wenn Sie die Verkettung += verwenden, wird der Wert von null in einen String "null" verwandelt. Also verketten Sie Ihre Zeile mit der Zeichenkette "null", um die Ausgabe zu erhalten, die Sie sehen.

Wenn Sie nicht wollen, dass, weisen nur statt:

sArray[i] = line; 
1

Was denken Sie in sArray[i], bevor Sie ist += die String line?

Es ist null natürlich!

Versuchen, dies zu sehen:

String N = null; 
String M = N + "something"; 
System.out.println(M); 

Mit dem Java-String += Operator kompiliert mit StringBuilder darunter. Aber jedes Element wird zuerst durch String.valueOf() durchlaufen.

Und String.valueOf(null) gibt "null" als String zurück.

So wertet es an:

String N = null; 
String M = StringBuilder.append(N).append("something").toString(); 
System.out.println(M); 

Was wiederum gibt Ihnen:

String M = StringBuilder.append(null).append("something").toString(); 

die letztlich gibt Ihnen:

String M = StringBuilder.append("null").append("something").toString(); 

PS. Die Zuweisung einer falschen Länge zum Array ist ein separates Problem. Die Länge jedes Strings und die Länge des Arrays sind zwei verschiedene Konzepte.

0

ist Warum smth nicht wie das:

int line = 0; 
for (String line = br.readLine(); line != null; line = br.readLine()) { 
//... 
}