我的建议是逐行读取文件并创建“Item”类型的普通POJO(其中Item仅仅是您自己编写的具有4个实例变量(所有Strings)的类,即制造商,类型,颜色和价格)。
在阅读文件时,您可以为文本文件中的每4行创建一个Item实例(例如,您的第一个项目将有制造商=“小提琴”,类型=“电”,颜色=“蓝色”和价格=“$ 23”)。
然后你可以只是把每一个项目到一个共同的ArrayList为您创建它们,一旦你读完该文件,你可以使用下面的正确排序是:
Collections.sort(itemList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o1.getManufacturer().compareTo(o2);
}
});
其中itemList中是ArrayList<Item>
。
您的列表现在将进行排序,循环遍历它,并将每个项目中的数据写入您的ouptut文件,就像那样简单。
编辑根据要求,我会提供更多的细节,但是,尽管最初我说我会按照您的要求使用手动排序,我不会再那样做了。相反,我会尝试向你解释Collections.sort方法,因为知道如何使用它真的很重要。
所以让我们开始使用Item类。我只想让这个类公共的所有实例变量,虽然你也许应该相当有他们的私人与通常的getter和setter方法(注意,我也忽略包和import语句):
public class Item {
public String manufacturer;
public String type;
public String colour;
public String price;
public Item(String manufacturer, String type, String colour, String price) {
this.manufacturer = manufacturer;
this.type = type;
this.colour = colour;
this.price = price;
}
}
这个类用于存储我们希望排序的数据。现在让我们在你的主要方法看看:
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("inputFile.txt"));
String nextLine = reader.readLine();
List<Item> listOfItems = new ArrayList<Item>();
while (nextLine != null) {
if (!nextLine.equals("\n") && !nextLine.isEmpty()) {
String manufacturer = nextLine;
String type = reader.readLine();
String colour = reader.readLine();
String price = reader.readLine();
Item newItem = new Item(manufacturer, type, colour, price);
listOfItems.add(newItem);
}
nextLine = reader.readLine();
}
reader.close();
Collections.sort(listOfItems, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o1.manufacturer.compareTo(o2.manufacturer);
}
});
PrintWriter writer = new PrintWriter("outputFile.txt");
for (Item item : listOfItems) {
writer.println(item.manufacturer);
writer.println(item.type);
writer.println(item.colour);
writer.println(item.price);
writer.println();
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
好了,所以重要的部分是要注意如何Collections.sort作品。你将这个方法传递给一个集合(或者更具体地说,在我们的例子中是一个List/ArrayList),它会为你列出这个列表中的条目。最大的问题是它如何知道哪个Item对象应该第一个,第二个等等。因为我们要对制造商进行排序,所以我们需要告诉sort()使用他们的制造商实例变量来比较Item对象。
这是sort()定义的第二个参数。这new Comparator<Item>
部分告诉排序,它将排序项目对象。 sort()将使用我们定义的compare()方法来执行此排序。它在排序过程中将项目与其他项目进行比较,compare()方法告诉sort()仅比较被排序的项目的制造商,并仅根据该排序进行排序。
如果有什么东西还不清楚,请具体问我。我认为理解这个解决方案对你来说比向你展示如何编写一个冒泡排序更有用。如果你想只是谷歌“Java泡沫排序”和大量的文章/帖子将弹出。
比较方法,你有什么这么远吗? – OscarRyz 2011-02-11 15:41:44
嘿@OscarRyz .....其实......我只是一个学生......而且用户给我的解决方案对我来说是相当难理解的......有很多东西在里面我没有明白.....你能不能用一种非常简单易懂的技术来帮助我......也见过使用“.sort”方法的人们......你能给我一个解决方案,不使用这种方法.....而是使用泡沫或序列排序...谢谢....真的很抱歉的不便... – pranavsharma 2011-02-11 18:47:24
Downvoted,因为你实际上并没有期待有一个问题的答案,你只是想找人做你的功课。 – 2011-02-11 19:20:54