2012-11-14 86 views
0

我無法將從文件讀取的文本讀入數組列表。將從文件讀取的文本添加到java中的數組列表中

我的文字是這樣的:

438;MIA;JFK;10:55;1092;447 
638;JFK;MIA;19:45;1092;447 
689;ATL;DFW;12:50;732;448 etc... 

我的代碼如下所示:

package filesexample; 
import java.io.*; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.ArrayList; 
/** 
* 
* @author 
*/ 
public class FilesExample { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException { 

    File file = new File ("/Schedule.txt"); 

    try 
    { 
     Scanner scanner= new Scanner(file);; 

     while (scanner.hasNextLine()) 
     { 
      String line = scanner.nextLine(); 
      Scanner lineScanner= new Scanner(line); 
      lineScanner.useDelimiter(";"); 
      while(lineScanner.hasNext()){ 
      String part = lineScanner.next(); 
      System.out.print(part + " "); 
     } 

      System.out.println();   




     } 

    }catch (FileNotFoundException e){ 
      e.printStackTrace(); 
     } 
    } 
} 

入門的一些幫助,將不勝感激謝謝!

+1

從你想放入'ArrayList'的行中究竟做了什麼?任何特定部分或全部行? –

+5

問題是什麼?我發佈的文字爲 – Juvanis

+0

,第一個號碼是航班號,出發地,目的地,時間,里程和價格。他們都需要爲每個類別擁有自己的數組,因此航班號將需要自己的數組,從它自己的數組等出發...... – user1824856

回答

0

你並不需要做以下

Scanner lineScanner= new Scanner(line); 
lineScanner.useDelimiter(";"); 

只是做

String[] parts = line.split(";"); 
0

使用String.split(delimiter)分裂您的字符串。

List<String> list = new ArrayList<String>(); 
    while (scanner.hasNextLine()) 
      { 
       String line = scanner.nextLine(); 
       String[] strArr = line.split(";"); 
       for(String s: strArr){ 
       list.add(s); //adding a string into the list 
       System.out.println(s + " "); 
       } 
       } 

       System.out.println();  

編輯:從您的意見

我張貼的文字

,第一個數字是航班號,出發地,目的地,時間,里程和價格。他們都需要有 有每個類別自己的陣列,因此航班號將需要自己 陣列,產地自己的陣列等

你並不需要爲每個屬性的數組。創建一個班級並將其命名爲Filght。並將您的屬性作爲實例變量。

class Flight { 
private long filghtNo; 
private String origin; 
private dest; 
private Date time; 
private long miles; 
private double price; 
//setters and getters 
} 

    List<Flight> list = new ArrayList<Flight>(); 
    Flight flight = new Flight(); 
    while (scanner.hasNextLine()) 
      { 
       String line = scanner.nextLine(); 
       Scanner scan = new Scanner(line); 
       if(scan.hasNextLong()){ 
       flight.setFilgthNo(scan.nextlong()); 
        } 
       else if // do the same for other properties 
       } 

    list.add(flight); 

這種方式是面向更對象。

0

他們都需要,有自己的爲每個類別排列,所以飛行 數量將需要自己的陣列,產地自己的數組

我會說,不知道。你不需要爲他們每個人分開數組。

我寧願創建一個帶有屬性的class: - flight number, origin, destination, time, miles and price

現在,對於每一行,我只是將它拆分爲;,並且在類中有一個構造函數,它將一個數組作爲參數。而不是單獨的ArrayList爲每個這些參數,我將有該類實例的ArrayList

class Flight { 
    private int flightNumber; 
    private String origin; 
    private String destination; 
    ... so on for `time, miles and price` 

    public Flight(String[] attr) { 
     this.flightNumber = Integer.parseInt(attr[0]); 
     this.origin = attr[1]; 
     this.destination = attr[2]; 
     ... so on. 
    } 
} 

然後你在哪裏使用: -

Scanner lineScanner = new Scanner(line); 
lineScanner.useDelimiter(";"); 

我會用String#split()得到個別屬性,然後創建一個ArrayList<Flight>,並添加Flight實例吧: -

List<Flight> flights = new ArrayList<Flight>(); 

while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    String[] attributes = line.split(";"); 
    flights.add(new Flight(attributes)); 
} 

注意: -

您可以改進實例化Flight類的方式,以及如何設置不同的屬性。由於您的屬性屬於不同的類型,並且它們位於String form中,所以您需要使用String to IntegerString to double中的適當的conversion,這裏我沒有考慮。

0

我重新提出了更多面向對象方法的需求,但這裏是您所需要的。

public final class FlightInfoParser { 

    private static final String[] EMPTY_STRING_ARRAY = new String[]{}; 

    public static void main(String[] args) throws IOException { 
    BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file))); 

    List<String> flightNumbersList = new ArrayList<String>(); 
    List<String> originsList = new ArrayList<String>(); 
    List<String> destinationsList = new ArrayList<String>(); 
    List<String> departureTimesList = new ArrayList<String>(); 
    List<Integer> milesList = new ArrayList<Integer>(); 
    List<Double> pricesList = new ArrayList<Double>(); 

    String line; 
    while ((line = r.readLine()) != null) { 
     String[] fields = line.split(";"); 
     flightNumbersList.add(fields[0]); 
     originsList.add(fields[1]); 
     destinationsList.add(fields[2]); 
     departureTimesList.add(fields[3]); 
     milesList.add(Integer.parseInt(fields[4])); 
     pricesList.add(Double.parseDouble(fields[5])); 
    } 

    String[] flightNumbersArray = flightNumbersList.toArray(EMPTY_STRING_ARRAY); 
    String[] originsArray = originsList.toArray(EMPTY_STRING_ARRAY); 
    String[] destinationsArray = destinationsList.toArray(EMPTY_STRING_ARRAY); 
    String[] departureTimesArray = departureTimesList.toArray(EMPTY_STRING_ARRAY); 

    int[] milesArray = new int[milesList.size()]; 
    for (int i = 0, len = milesArray.length; i < len; ++i) { 
     milesArray[i] = milesList.get(i); 
    } 

    double[] pricesArray = new double[pricesList.size()]; 
    for (int i = 0, len = pricesArray.length; i < len; ++i) { 
     pricesArray[i] = pricesList.get(i); 
    } 

    } 

} 
相關問題