0

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

身份证、父母身份证、姓名

4,17,ABC

1,0,定义

17,0,吉

9,17,荷航

输出应该是:

吉,17

荷航,9

abc,4

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

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

4

2 回答 2

0

你可以尝试一些东西。看看你的例子,我很想使用 aMap并使用 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)javadoc 解释了它如何处理重复项),那么它只是一个迭代列表和输出的简单例子。

于 2013-01-27T03:48:38.470 回答
0

你正在艰难地做这件事。

这里有一些建议:

  • 不要从原始类型和数组构建数据结构。Java 有集合类型(例如列表、地图等),它允许您创建自定义类型。

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

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

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

于 2013-01-27T05:05:38.103 回答