将单个元素从文本文件拆分为java中的数组

时间:2013-01-27 02:51:45

标签: java arrays split

我正在尝试拆分从文本文件中读取的元素,并将它们写入java中的单独数组中。 INPUT是这样的:

  

ID,PARENTID,名称

     

4,17,ABC

     

1,0,DEF

     

17,0,GHI

     

9,17,KLM

     

OUTPUT应为:

     

GHI,17

     

KLM,9

     

ABC,4

     

DEF,1

必须根据id以降序排序。我认为最有效的方法是快速排序(我有想法这样做)。我的问题是我已经拆分了文本文件的所有元素,但我无法为id,parentid和name创建单独的数组。在将它们拆分成数组并对id进行排序后,id应该给出相应的名称。有人可以帮我写出数组部分吗? 提前谢谢。

我走了这么远:

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());
        }
    }
}

这将拆分文本文件中的所有元素。

2 个答案:

答案 0 :(得分:0)

你可以尝试一些事情。看看你的例子,我很想使用Map并使用id作为键,并有一个其他输入的列表,例如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]));
     ....
}

然后,您需要按ID和输出进行排序。

既然Input实现了Comparablejavadoc)我们可以使用Collections.sort(inputList)the javadoc explains how it deals with duplicates)对其进行排序,那么这只是一个迭代列表和输出。

答案 1 :(得分:0)

你正在艰难地做这件事。

以下是一些建议:

  • 不要从基本类型和数组构建数据结构。 Java有集合类型(例如列表,映射等),它允许您创建自定义类型。

  • 当您拥有二维数据结构且主要要求是对行进行排序时,请不要将列作为主结构;即如果你有一个数组/行列表,按行排序比列数组更容易。

  • Java库中有标准(高效)排序实现。要使自定义类(或数组)可排序,您需要将该类声明为实现Comparable<TheClass>或创建分隔符Comparator<TheClass>对象。

  • 使用javadoc帮助您了解标准库中的可用内容。