【问题标题】:Need an help to sort, Handle a tab seperated text file需要帮助进行排序,处理制表符分隔的文本文件
【发布时间】:2015-07-21 17:26:17
【问题描述】:

您好,我有一个文本文件(制表符分隔)。

我想打开它,阅读它并过滤所需的列,就像我们在 excel 中所做的那样。有人可以提供示例代码吗?

我对如何进一步执行以下步骤的概念持保留态度。

  • 价格必须在处理前使用 DESC 顺序排序。
  • 始终,必须在输出中打印前两列。
  • 除了前两列之外,仅需要根据给定的输入打印所需的列。
  • 输入将类似于 (Mango/purchased/top50)。因此它应该只选择“Mango”下的前 50 个“尚未购买”及其各自的前两列。

示例输入文件。

itemNumber  Price   Mango   Apple   Bannana
112201      purchased   need to plan    purchased
112202  55  yet to buy  yet to buy  purchased
112202  67  need to plan    purchased   purchased
112203  456 need to plan    need to plan    need to plan
112203  33  need to plan    yet to buy  need to plan
112204  456 need to plan    yet to buy  need to plan
112204      yet to buy  purchased   need to plan
112205  77  yet to buy  purchased   need to plan
112205  99  yet to buy  purchased   yet to buy
112206  0   yet to buy  purchased   yet to buy

代码不完整。 在这里,我试图将文件的标题添加到 arraylist 并将内容添加到另一个 arraylist。然后尝试使用索引号比较它们。这种方式正确吗?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class main {

    @SuppressWarnings({ "resource", "unused" })
    public static void main(String[] args) throws IOException {
        ZipFile zipFile = new ZipFile(
                "filename.tsv.zip");

        Enumeration<? extends ZipEntry> entries = zipFile.entries();

        while (entries.hasMoreElements()) {

            String fruit = "Mango";
            String mappingstatus = "purchased";

            // reading a file
            ZipEntry entry = entries.nextElement();
            InputStream stream = zipFile.getInputStream(entry);
            InputStreamReader read = new InputStreamReader(stream);
            BufferedReader br = new BufferedReader(read);

            // creating a new list
            List<String> heading = new ArrayList<String>();
            String[] a = br.readLine().split("\t");
            heading = Arrays.asList(a);

            List<String> content = new ArrayList<String>();

            String s;
            while ((s = br.readLine()) != null) {
                String[] b = br.readLine().split("\t");
                content = Arrays.asList(b);

            }

        }
    }
}

【问题讨论】:

  • 你试过什么?我们很乐意帮助解决小问题和错误,但您需要将您拥有的代码放在上面。我们不会为你做作业。
  • @mdewitt - 粘贴了我的代码。
  • 我不明白预期的结果
  • @RobertoTellezIbarra - 如果输入是 (Mango/need to plan/top50) 那么结果应该像下面的itemNumber Price Mango 112204 456 need to plan 112206 456 need to plan 112203 67 need to plan 112205 33 need to plan
  • 我建议您使用 Excel 文件而不是制表符分隔的文本文件,并使用 Apache POI

标签: java arrays list sorting arraylist


【解决方案1】:

试试这个

class Item implements Comparable<Item> {

    int itemNumber;
    int price;
    String mango;
    String apple;
    String bannana;

    public Item(int itemNumber, int price, String mango, String apple, String bannana) {
        this.itemNumber = itemNumber;
        this.price = price;
        this.mango = mango;
        this.apple = apple;
        this.bannana = bannana;
    }

    //GETTERS

    @Override
    public int compareTo(Item compareItem) {
        int comparePrice = ((Item) compareItem).getPrice();
        //ascending order
        //return this.price - comparePrice;

        //descending order
        return comparePrice - this.price;
    }

}

public static void main(String[] args) {
    List<Item> items = new ArrayList<>();

    //populate the items list by creating an Item for every line you read.
    //Handle null price values
    Collections.sort(items);

    //assuming input is some like 'Mango/purchased/top50'
    String input = "Mango/purchased/top50";
    String[] parts = input.split("/");
    int max = Integer.parseInt(parts[2].substring(3));

    List<Item> result = new ArrayList<>();
    for (int i = 0; i < items.size() && result.size() < max; i++) {
        Item item = items.get(i);
        if ((parts[0].equals("Mango") && item.getMango().equals(parts[1]))
                || (parts[0].equals("Apple") && item.getApple().equals(parts[1]))
                || (parts[0].equals("Bannana") && item.getBannana().equals(parts[1]))) {
            result.add(item);
        }
    }
}

完成评论部分,它必须工作。更多关于排序的参考:Sorting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多