2013-01-27 4 views
0

Я пытаюсь разбить элементы, прочитанные из текстового файла, и записать их в отдельные массивы в java. ВХОДА что-то вроде этого:Разбиение отдельных элементов из текстового файла на массивы в java

ID, ParentID, имя

4,17, а

1,0, Защита

17,0, ГХОВ

- , 17, klm

ВЫХОД должен быть:

GHI, 17

КЛМ, 9

аЬс, 4

четкости, 1

Он должен быть отсортирован на основе идентификатора в порядке убывания. Я думаю, что самый эффективный способ сделать это - quicksort (у меня есть идея сделать это). Мой вопрос: я разделил все элементы текстового файла, но я не могу создать отдельные массивы для id, parentid и name. После того, как они разбиты на массивы и идентификаторы отсортированы, идентификатор должен дать соответствующее имя. Может кто-то, пожалуйста, помогите мне написать в массиве? Спасибо заранее.

Я зашел так далеко:

import java.io.*; 

public class Folder { 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    try { 
     FileInputStream fstream = new FileInputStream("input.txt"); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine;   
     //Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      // Print the content on the console 
      String[] a=strLine.split(",",3); 
      String id=a[0]; 
      String parentid=a[1]; 
      String name=a[2]; 
      for(int i=0;i<3;i++) { 
       System.out.println(a[i]); 
      } 
      //System.out.println (strLine); 
     } 
     //Close the input stream 
     in.close(); 
     //Catch exception if any 
     } 
     catch (Exception e) { 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 
} 

Это поделит все элементы из текстового файла.

+0

Пожалуйста, не используйте DataInputStream читать текст http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html –

ответ

0

Вы можете попробовать несколько вещей. Глядя на ваш пример, мне бы хотелось использовать Map и использовать идентификатор в качестве ключа, а также список других входов, например Map<Integer,List<String>>, это, вероятно, слишком велико для вашего примера.

Вы также могли бы сделать новый Object возможно

public Input implements Comparable<Input>{ 
    private int id; 
    private int parentId; 
    private String name; 

    public Input(int a, int b, String c){ 
     //set params} 
    } 

    @Override 
    public int compareTo(Input o){ 
     Input input = (Input) o; 
     return this.id - input.getId(); 
    } 
} 

Вы могли бы сделать массив, если вы знаете, сколько строк вы должны читать, но использовать коллекцию, если вы не, как это будет динамично расти.

List<Input> inputList = new ArrayList<Input>(); 
while ((strLine = br.readLine()) != null){ 
    String[] a=strLine.split(",",3); 
    inputList.add(new Input(a[0],a[1],a[2])); 
    .... 
} 

Для этого вам необходимо отсортировать данные по идентификатору и произведению.

Теперь, когда Input реализует Comparable (javadoc) мы можем отсортировать его с помощью Collections.sort(inputList) (the javadoc explains how it deals with duplicates), то тогда просто случай переборе списка и вывода.

+0

Спасибо за вашу помощь , – amar1989

+0

Если я хочу использовать карту, все идентификаторы должны быть уникальными. что, если есть дубликаты идентификаторов? Я хочу сортировать идентификаторы в порядке убывания, и я хочу, чтобы даже после повторного сортировки отображались повторяющиеся идентификаторы. – amar1989

+0

Я расширил свой ответ, используя сопоставимые, как это предлагается в другом ответе. Нет карты не могут содержать дубликаты ключей, поэтому, если они существуют, это не решение. –

0

Вы делаете это нелегко.

Вот несколько советов:

  • Не строить свои структуры данных из примитивных типов и массивов. Java имеет типы коллекций (например, списки, карты и т. Д.) И позволяет создавать пользовательские типы.

  • Если у вас есть 2-D структура данных, и ваше основное требование состоит в сортировке строк, то не делайте столбцы первичной структурой; т. е. если у вас есть массив/список строк, будет проще сортировать по строкам, чем массив столбцов.

  • Существуют стандартные (эффективные) реализации сортировки в библиотеках Java. Чтобы создать сортируемый класс (или массив), вам необходимо объявить класс как реализующий Comparable<TheClass> или создать объект-разделитель Comparator<TheClass>.

  • Используйте javadoc, чтобы помочь вам понять, что доступно в стандартных библиотеках.

+0

Я новичок в java. Итак, как мне решить эту проблему? Мне нужно отсортировать идентификаторы в порядке убывания и напечатать соответствующее имя для этих идентификаторов. Если я использую карту для идентификаторов, то что произойдет с дублирующимися идентификаторами? что мне делать, если я хочу, чтобы дубликаты отображались? – amar1989

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