2016-04-18 7 views
2

ich eine Reihe von Daten in einem TXT-Dokument in Form gegeben wurde:Wie zwei Spalten von Ints in einer txt-Datei analysieren

0 1 
0 3 
0 4 
0 5 
0 6 
0 7 

... und so weiter

Meine Frage ist, wie kann ich das so parsen, dass ich die linke Spalte der ganzen Zahlen in ein Array setze, und ebenso für die rechte Spalte von Zahlen. Jedes Zahlenpaar hat eine eigene Zeile.

In dieser Reihe von Daten, die ich angegeben habe, int[] leftColumn wäre alles Nullen und int[] rightColumn würde 1, 3, 4, 5, 6, 7 enthalten.

Antwort

2

java.util.Scanner schon hat die meisten schweres Heben für Sie, es ist nur eine Frage der Verwendung:

List<Integer> leftColumnTmp = new LinkedList<>(); 
List<Integer> rightColumnTmp = new LinkedList<>(); 
try (Scanner sc = new Scanner("myfile.txt")) { 
    while (sc.hasNextLine()) { 
     leftColumnTmp.add(sc.nextInt()); 
     rightColumnTmp.add(sc.nextInt()); 
    } 
} 

int[] leftColumn = leftColumnTmp.stream().mapToInt(Integer::intValue).toArray(); 
int[] rightColumn = rightColumnTmp.stream().mapToInt(Integer::intValue).toArray(); 
+0

ich Dieser Fehler "Die Methode stream() ist nicht definiert für den Typ Liste ". –

+0

Funktioniert nur auf Java 8 und höher. –

+0

@AniMenon yup, das ist eine in modernen Java. Beachten Sie jedoch, dass der einzige Teil, der Java 8 benötigt, die letzten beiden Anweisungen sind, die eine 'Liste ' in eine 'int []' konvertieren. Wenn Sie sich nicht auf Java 8 verlassen möchten, können Sie dies selbst tun, indem Sie eine for-Schleife verwenden oder eine dritte Instanz wie Apache Commons Langs ArrayUtils – Mureinik

0

Lesen Sie die Datei Zeile für Zeile und Teilungslinien durch den Raum, fügen Sie dann zu den Arrays.

BufferedReader br = new BufferedReader(new FileReader(<PATH/TO/FILE>)); 
try { 
    String line = br.readLine(); 
    List<Integer> leftColumn = new ArrayList<>(); 
    List<Integer> rightColumn = new ArrayList<>(); 
    while (line != null) { 

     String strarray[] = line.split(" "); 
     for (int count = 0; count < strarray.length ; count++) { 
      leftColumn.add(Integer.parseInt(strarray[count])); 
      rightColumn.add(Integer.parseInt(strarray[++count])); 
     } 
     line = br.readLine(); 
    } 
    System.out.println("Left Column :"+leftColumn); 
    System.out.println("Right Column :"+rightColumn); 
}finally { 
    br.close(); 
} 
+0

@slartidan removed 'sb' verwenden –

0

Es gibt eine einfache Möglichkeit, Dateien zu lesen, wenn java8 mit:

List<Integer> left = new ArrayList(); 
List<Integer> right = new ArrayList(); 

Files.lines(Paths.get("c:\\lines.txt")) 
    .map(l -> l.split("\\s")) 
    .forEachOrdered(l -> { 
     left.add(Integer.parseInt(l[0])); 
     right.add(Integer.parseInt(l[1])); 
    }); 

Wenn Sie wirklich int[] s benötigen, können Sie es später konvertieren:

int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray(); 
int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();