2017-08-04 3 views
0

Ich versuche, die durchschnittliche Anzahl der Elemente aus einer Liste von Versicherungen zu berechnen, wie bekomme ich den Wert nur der Elemente (int) aus einem Text Datei? HierLesen eines bestimmten Datentyps aus einer Zeile in einer Textdatei

ist ein Beispiel für Daten in der Textdatei:

20-Jul-2017 EQ123B 3 40000 30 A 5389 l a 
20-Jul-2017 ED423A 2 40000 30 A 5389 k d 
31-Jul-2017 ZD123V 4 40000 30 A 5389 s c 

Jede Linie repräsentiert Daten für eine andere Versicherung, mit der dritten Spalte ist die Menge der Gegenstände versichert werden. Ich hatte geplant, die durchschnittliche Anzahl der Artikel pro Richtlinie zu erhalten, indem ich die Gesamtmenge der Artikel in der Datei erhalte und diese durch die Anzahl der Richtlinien dividiere.

Hier ist mein Code so weit:

try{ 
     int numOfPolicies = 0; 
     try (Scanner file = new Scanner(new FileReader("policy.txt"))) { 

      //loop through the file counting each line. Each line represents a policy 
      while(file.hasNextLine()){ 

       numOfPolicies++; 
       file.nextLine(); 
      } 
     } 
     System.out.println("Total Number of Policies: " + numOfPolicies); 

    } 
    catch(FileNotFoundException e){ 

     System.out.println("File not found"); 
    } 

Wie Sie habe ich schon die Anzahl der Richtlinien in der Datei bekommen zu sehen. Wie lese ich nur die Anzahl der Elemente aus jeder Zeile und speichere diese in einer Variablen?

+0

eine Regex mit einer Erfassungsgruppe Versuchen Sie, die Sie nur die Nummer – Lino

+0

geben wird, was wollen Sie bekommen , welche Nummer? –

+0

@YCF_L das dritte Element jeder Zeile, z. B. 3 in der ersten Zeile – Liam

Antwort

3

Wenn Ihre Zeilen dieses Format folgen (Leerzeichen nur als Separator):

20-Jul-2017 EQ123B 3 40000 30 A 5389 l a 

3 abzurufen, könnten Sie die Zahl zwischen dem zweiten und dem dritten Leerzeichen erfassen.
Sie könnten die String.split() Methode mit dem \\s regex und einer Grenze von 4 verwenden, wie Sie Token nach der Anzahl der Verträge ist es egal:

String[] split = file.nextLine().split("\\s+", 4); 

Sie erhalten das folgende Token:

20-Jul-2017

EQ123B

40000 30 A 5389 la

Sie könnten das dritte Token erhalten so:

String number = split[2]; 
+0

was wäre das 's' in 'split ...'? Muss ich diesen String auf die ganze Zeile einstellen? – Liam

+0

Das 's' ist die Leseleitung. Ich habe aktualisiert. Sie können nicht die ganze Zeile lesen, indem Sie einen 'BufferedReader' anstelle von Scanner verwenden und indem Sie mit einem 'kleinen' Puffer lesen, indem Sie' read (char cbuf [], int off, int len) 'benutzen – davidxxx

Verwandte Themen