2014-02-19 5 views
1

Я знаю, что на этот вопрос можно было бы ответить много раз. Однако я все еще не могу решить эту конкретную проблему.Чтение целых чисел в .txt-файле и сохранение в arraylist

В основном у меня есть .txt-файл со следующим форматом.

String Integer String 

Например,

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

Как я могу прочитать файл построчно и сохранять номера/целые ТОЛЬКО в ArrayList?
Спасибо!

+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

wow очень приятное усилие! однако, когда я компилирую в терминале, он возвращает ошибку. Исключение в потоке «главный» java.lang.ArrayIndexOutOfBoundsException: 1 \t в InputFileParser.parse (InputFileParser.java:20) \t в Main.main (Main.java:11) – user2875021

+0

Это, скорее всего, связано с форматом вашего входного файла , Дважды проверьте, что ваше содержимое точно так же, как вы разместили выше. Я включил код, чтобы вы могли использовать его в качестве рабочего примера и иметь возможность отлаживать и распознавать его слабые места, где вам может понадобиться добавить дополнительную обработку ошибок (например, если строка не может быть разделена дважды пробелами) , –

+0

Да. TXT-файл точно так же, как я опубликовал выше, только с 1 отдельным пространством. Я также попробовал другой пример ответа, и он также дает ту же ошибку компиляции. (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 
} 
Смежные вопросы