2014-02-19 176 views
1

我知道這個問題可能會被回答很多次。但是,我仍然無法解決這個具體問題。讀取.txt文件中的整數並存儲在arraylist中

基本上我有一個.txt文件,格式如下。

String Integer String 

例如,

la 789 ferrari 
turbo 560 porsche 
veyron 987 bugatti 
sls 563 benz 
dbs 510 aston 

我如何逐行讀取文件中的行和數字/整數只存儲到數組列表?
謝謝!

+0

但你有沒有試過至少? –

回答

1

這裏有一個更完整的Java式的解決方案,使用Java 7 ...爲了好玩。

Main.java

import java.util.List; 

public class Main 
{ 
    private static final InputFileParser inputFileParser = new InputFileParser(); 
    private static final EntryNumberExtractor extractor = new EntryNumberExtractor(); 
    private static final String FILENAME = "input-file.txt"; 

    public static void main(String... args) 
    { 
     List<Entry> entries = inputFileParser.parse(FILENAME); 
     List<Integer> extractedIntegers = extractor.extract(entries); 

     System.out.println("Entries: "); 
     prettyPrintListItems(entries); 

     System.out.println(); 

     System.out.println("Entry numbers: "); 
     prettyPrintListItems(extractedIntegers); 
    } 

    private static <T> void prettyPrintListItems(List<T> list) 
    { 
     for (T item : list) 
     { 
      System.out.println(item); 
     } 
    } 
} 

InputFileParser.java

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class InputFileParser 
{ 
    public List<Entry> parse(String filename) 
    { 
     List<Entry> entries = new ArrayList<>(); 
     File f = new File(filename); 
     try (BufferedReader reader = new BufferedReader(new FileReader(f));) 
     { 
      String line = null; 
      while ((line = reader.readLine()) != null) 
      { 
       String[] components = line.split(" "); 
       entries.add(new Entry(components[0], Integer.parseInt(components[1]), components[2])); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     return entries; 
    } 
} 

EntryNumberExtractor.java

import java.util.ArrayList; 
import java.util.List; 

public class EntryNumberExtractor 
{ 
    public List<Integer> extract(List<Entry> entries) 
    { 
     List<Integer> integers = new ArrayList<>(); 
     for (Entry e : entries) 
     { 
      integers.add(e.getNumber()); 
     } 
     return integers; 
    } 
} 

Entry.java

public class Entry 
{ 
    private String model; 
    private int number; 
    private String company; 

    public Entry(String model, int number, String company) 
    { 
     this.model = model; 
     this.number = number; 
     this.company = company; 
    } 

    public Integer getNumber() 
    { 
     return number; 
    } 

    @Override 
    public String toString() 
    { 
     return "model: " + model + ", number: " + number + ", company: " + company; 
    } 
} 
+0

哇很好的努力!但是,當我在終端中編譯時,它會返回一個錯誤。在main.main(Main.java:11)​​ – user2875021

+0

線程「主」java.lang.ArrayIndexOutOfBoundsException異常:1 \t在輸入文件夾.parse 。仔細檢查您的內容是否與上面張貼的內容完全相同。我已經包含了代碼,以便您可以將它用作工作示例,並且能夠調試並識別它的缺點,您可能需要添加額外的錯誤處理(例如,如果行不能用空格分隔兩次) 。 –

+0

是的.txt文件是完全一樣,我只有一個單獨的空間上面張貼。我也嘗試了另一個示例答案,它也給出了相同的編譯錯誤。 (ArrayIndexOutOfBoundsException) – user2875021

0

你可以閱讀每一行,並通過空間分割線串,檢索的數量,並將其存儲在數組列表

+0

這可能更適合作爲評論 – RyPope

1
ArrayList<int> list = new ArrayList<int>(); 

try { 

    BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    String line = br.readLine(); 

    while(line != null) 
    { 
     String[] tokens = line.Split(" "); 
     list.Add(Integer.parseInt(tokens[1])); 
     line = br.readLine() 

    } 
catch(Exception e) 
{ 
    //Probably a conversation exception or a index out of bounds exception 
} 
相關問題