我的建議是逐行讀取文件並創建「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