2017-11-22 3 views
1

Ich erstelle ein Programm, mit dem Benutzer mit einer Datei interagieren können, die eingegeben wird. Eine der Optionen besteht darin, die Datei anzuzeigen. Im Folgenden speichere ich die Datei zunächst in einer Arraylist, indem ich Arraylisten aus Linien und dann eine innere, von Streichern getrennte Arraylist, getrennt durch Leerzeichen, erzeuge.Wie man durch eine Arraylist einer Arraylist der Zeichenketten iteriert?

Scanner sc = new Scanner(fileName); 

    while (sc.hasNextLine()) { 
     String line = sc.nextLine(); 
     String[] words = {}; 
     words = line.split(" "); 
     ArrayList<String> lineArray = new ArrayList<String>(); 
     for (int i = 0; i < words.length; i++) { 
      lineArray.add(words[i]); 
     } 
     fileByLine.add(lineArray); 
    } 
    sc.close(); 

Ich versuche, den Inhalt der Arraylist, genannt fileByLine zu drucken, wie sie in der Datei erscheinen, aber ich bin mir nicht sicher, wie. Irgendein Vorschlag?

case '1': 
for(int i = 0; i < fileByLine.size(); i++){ 
for(int j = 0; j < fileByLine.[i].size(); j++){ 
System.out.print(fileByLine[i][j]); 
    } System.out.println(""); 
} break; 
+0

Was bedeutet die aktuelle Ausgabe aussehen? –

+0

@Ally Bitte aktualisieren Sie die Formatierung Ihres zweiten Codebeispiels, um es lesbarer zu machen. Und willkommen auf der Website! – oowekyala

Antwort

5

Sie verwenden Dirac-Notation, die für Arrays ist, müssen Sie get() verwenden, für Arraylisten

for(int i = 0; i < fileByLine.size(); i++){ 
    for(int j = 0; j < fileByLine.get(i).size(); j++){ 
     System.out.print(fileByLine.get(i).get(j)); 
    } 
    System.out.println(""); 
} 
+0

Danke !! Dies ist, was ich versucht habe zu tun, aber konnte nicht ganz richtig ... der Code läuft perfekt jetzt :) – Ally

0

Oder so etwas wie dies auch ...

 for (List list : fileByLine) { 
     for (Object line : list) { 
      System.out.print(line); 
     } 
     System.out.println(""); 
    } 
3

Seit Ihr Container besteht aus String type Sie können es einfach wie folgt drucken:

System.out.println(fileByLine); 

Keine Notwendigkeit, durch Ihre Sammlung zu durchlaufen. Zum Beispiel, sagen wir, Sie folgenden Liste haben:

List<String> oneList = new ArrayList<>(Arrays.asList("1 2 3 4 5 6 7".split(" "))); 

und Sie wollen es in eine andere Liste hinzuzufügen:

List<List<String>> anotherList = new ArrayList<>(); 
anotherList.add(oneList); 

Nach Zugabe würden Sie es drucken möchten, und hier ist, wie es aussieht:

System.out.println(anotherList); 

Output: [[1, 2, 3, 4, 5, 6, 7]]

Es druckt wegen String type, wenn Sie andere custom type in Ihrem Container behalten und versuchen, es zu drucken, das nicht funktioniert, bis Sie override toString() Methode.

Wenn Sie mehr als zwei verschachtelte Listen durchlaufen müssen, können Sie diesen Ansatz verwenden:

Iterator<List<String>> outerIterator = anotherList.listIterator(); 

while (outerIterator.hasNext()) { 
    Iterator<String> innerIterator = outerIterator.next().listIterator(); 

    while (innerIterator.hasNext()) { 
     String item = innerIterator.next(); 
     System.out.print(item + " "); 
    } 

    System.out.println(); 
} 
Verwandte Themen