我正在尝试拆分从文本文件中读取的元素,并将它们写入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());
}
}
}
这将拆分文本文件中的所有元素。
答案 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
实现了Comparable
(javadoc)我们可以使用Collections.sort(inputList)
(the javadoc explains how it deals with duplicates)对其进行排序,那么这只是一个迭代列表和输出。
答案 1 :(得分:0)
你正在艰难地做这件事。
以下是一些建议:
不要从基本类型和数组构建数据结构。 Java有集合类型(例如列表,映射等),它允许您创建自定义类型。
当您拥有二维数据结构且主要要求是对行进行排序时,请不要将列作为主结构;即如果你有一个数组/行列表,按行排序比列数组更容易。
Java库中有标准(高效)排序实现。要使自定义类(或数组)可排序,您需要将该类声明为实现Comparable<TheClass>
或创建分隔符Comparator<TheClass>
对象。
使用javadoc帮助您了解标准库中的可用内容。