2013-10-11 2 views
0

Так у меня есть файл со списком, как этоВключите текстовый файл в массив

2134: 193

192: 1856

1092: 1850

980: 759

и т. д.

Я хотел бы обработать файл и добавить его в массив, а затем уметь захватить e int's

как я хотел бы сделать System.out.println ("first +": "+ second);

Не уверен, что лучший способ сохранить это, но вот моя попытка до сих пор

public static void loadList() { 
    BufferedReader br = new BufferedReader(new FileReader("./data.txt")); 
    String line; 
    while ((line = br.readLine()) != null) { 
     String args[]; 
     args = line.split(":"); 
     int first = Integer.toInt(args[0]); 
     int second = Integer.toInt(args[1]); 
     System.out.println(first + " : " + second); 
    } 
    br.close(); 
} 
+0

В чем проблема в этом ... вы делаете хорошо. ! просто создайте массивы и поместите в нее свои данные. Я бы порекомендовал ArrayLists –

+0

Я не уверен, как хранить и хватать цифры - это моя проблема :(Я не очень хорошо разбираюсь в arraylists – Travs

ответ

3

Попробуйте это:

Класс

Class DataClass 
{ 
    public int first; // Deliberately public 
    public int second; 

    public DataClass(int val1, int val2){ 
    this.first = val1; 
    this.second = val2; 
    } 
} 

Код

public static void loadList() { 

    ArrayList<DataClass> pairList = new ArrayList<DataClass>(); 
    BufferedReader br = new BufferedReader(new FileReader("./data.txt")); 
    String line; 
    while ((line = br.readLine()) != null) { 
     String args[] = line.split(":"); 
     int first = Integer.valueOf(args[0]); 
     int second = Integer.valueOf(args[1]); 
     DataClass valPair = new DataClass(first,second); 
     pairList.add(valPair); 
     System.out.println(valPair.first + " : " + valPair.second); 
    } 
    br.close(); 
} 

Убедитесь, что соответствующие заявления попытке поймать

+0

, это хорошо - если между первым числом в каждой паре и во втором нет никакой связи. класс, заслуживающий рассмотрения, - Map. – NickJ

+0

Даже если есть, то Wont оба будут помещены в один индекс в два списка. –

+0

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

0

попробовать это!

public static void loadList() throws NumberFormatException, IOException { 
     BufferedReader br = new BufferedReader(new FileReader("./data.txt")); 
     String line; 
     while ((line = br.readLine()) != null) { 
      if(line.trim().length() == 0) 
       continue; 
      String args[]; 
      args = line.split(":"); 
      int first = Integer.parseInt(args[0]); 
      int second = Integer.parseInt(args[1]); 
      System.out.println(first + " : " + second); 
     } 
     br.close(); 
    } 
+0

Как это * действительно * отличается от того, что делает попытка OP? –

2

Ведение немного Java-магии здесь:

public static class DataValue { 

    protected final int first, second; 

    public DataValue(int first, int second) { 
     this.first = first; 
     this.second = second; 
    } 
    } 

    public static List<DataValue> loadList() throws FileNotFoundException, IOException { 
    final List<DataValue> result = new LinkedList<>(); 
    try (BufferedReader br = new BufferedReader(new FileReader("./data.txt"))) { 
     String line; 
     String args[]; 
     while ((line = br.readLine()) != null) { 
     try { 
      args = line.split(":"); 
      final int first = Integer.parseInt(args[0]); 
      final int second = Integer.parseInt(args[1]); 
      System.out.println(first + " : " + second); 
      result.add(new DataValue(first, second)); 
     } catch (NumberFormatException | NullPointerException | ArrayIndexOutOfBoundsExceptione) { 
      System.out.println("Unable to process line: " + line); 
     } 
     } 
    } 
    return result; 
    } 

Во-первых: это Java 7 код, он не работает с Java 6.

  • Один из Объектно-ориентированный принцип: хранить ваши данные вместе. Поэтому в этом подходе используется специальный класс держателей данных, чтобы вы не случайно путали числа из разных строк позже.

  • Использование формы концепции try (stream) {} Java 7 гарантирует, что поток должным образом закрыт при любых обстоятельствах. В вашем коде поток будет оставлен полуоткрытым, если чтение из него вызовет исключение.

  • Если вы работаете с динамическими данными из «снаружи», вы должны проверить его правильно. Вы никогда не знаете, кто-нибудь случайно или специально поместил ошибки в файл. Это то, что делает моя внутренняя попытка.

  • Использование ArrayList не является хорошей идеей в вашем случае, поскольку оно имеет фиксированный размер, и ваши данные, вероятно, не имеют фиксированного размера, поэтому внутреннее хранилище необходимо будет повторно создать несколько раз во время чтения , Связанный список отлично работает в этом случае (но плохо, если вы делаете myList.get(index)).
    Позже вы можете использовать Java для каждого цикла, как это:
    for (DataValue value : myList) { System.out.println(value.first + " : " + value.second); }

  • Вы должны избегать объявлять переменные внутри цикла, если вы не должны. И если вам нужно, используйте final, чтобы сообщить JIT, что он может использовать полную оптимизацию для этих переменных.

  • Integer.parseInt(string) - это правильный способ преобразования строки в целое. Обязательно прочтите определение, когда это выдает исключение!

+0

+1 для объяснения, а также ответ. – SevenBits

+0

моя доброта, программа, которую я делаю, не должна быть суперэффективной, нет необходимости в ООП, спасибо за ваш вклад, хотя я думаю, что было бы просто сделать только final Список result = new LinkedList <> (Integer, Integer); result.add (первый, второй); – Travs

+0

Список может содержать только один элемент, поэтому список невозможен с Java, это решается моим классом DataValue. Кроме того: если вы кодируете Java, вы кодируете ООП, это самое ядро ​​языка. ;) – TwoThe

Смежные вопросы