用Java排序TXT文件

时间:2013-11-13 00:21:19

标签: java sorting text

我有一个方法,我用来从网站提取信息,并让它目前转到TXT文件。我正在寻找类似于输出的信息,当我执行print语句以显示结果时,如下所示:

 QB 3 Anderson, Derek ACT TDS -- INT -- YDS -- RTG 0.0 CAR
 QB 2 Barkley, Matt ACT TDS 0 INT 4 YDS 300 RTG 44.6 PHI
 QB 5 Bethel-Thompson, McLeod ACT TDS 0 INT 0 YDS 0 RTG 0.0 SF

在我的文本文件中,我将其显示为:

QB3Anderson, DerekACTTDS--INT--YDS--RTG0.0CARQB2Barkley, MattACTTDS0INT4YDS300RTG44.6PHIQB5Bethel-Thompson, McLeodACTTDS0INT0YDS0RTG0.0SF

任何建议(请注意这是Java)

2 个答案:

答案 0 :(得分:1)

使用BufferedReader读取每一行。每一行都是一个字符串。然后将每行添加到列表中并对列表进行排序。

    BufferedReader reader = new BufferedReader(new FileReader("text.txt"));
    String line;
    ArrayList<Entry> list = new ArrayList<Entry>();
    while((line = reader.readLine()) != null) {
        list.add(new Entry(line));
    }
    Collections.sort(list);

    // list is sorted!

然后你需要Entry类:

import java.util.StringTokenizer;

public class Entry implements Comparable<Entry> {

    private String qb;
    private String number;
    private String name;

    public Entry(String text) {
        StringTokenizer st = new StringTokenizer("", " ");
        this.qb = st.nextToken();
        this.number = st.nextToken();
        this.name = st.nextToken();
        // ... etc
    }

    @Override
    public int compareTo(Entry other) {
        return this.name.compareTo(other.name);
    }
}

您的类需要实现Comparable,以便Collections.sort()知道如何排序。此外,实现equals()和hashCode()总是一个好主意。

答案 1 :(得分:0)

在我看来,你的问题实际上是关于解析和格式化而不是排序?

要设置这样的文字格式,您可以使用扫描仪轻松匹配每个QB,如此

String text = "QB3Anderson, DerekACTTDS--INT--YDS--RTG0.0CARQB2Barkley, MattACTTDS0INT4YDS300RTG44.6PHIQB5Bethel-Thompson, McLeodACTTDS0INT0YDS0RTG0.0SF";
Scanner scanner = new Scanner(text);
scanner.useDelimiter("QB");
while(scanner.hasNext()){
    String qb = "QB" + scanner.next();
    System.out.println(qb);
}

将输出:
QB3Anderson,DerekACTTDS - INT - YDS - RTG0.0CAR
QB2Barkley,MattACTTDS0INT4YDS300RTG44.6PHI
QB5Bethel-Thompson,McLeodACTTDS0INT0YDS0RTG0.0SF

然后,对于每个qb字符串,您可以使用String.subString()和String.indexOf()在您想要的字段上进行简单的模式匹配,例如。

String number = qb.substring(2, 3);
String name = qb.substring(3, qb.indexOf("ACT"));
String INT = qb.substring(qb.indexOf("INT") + 3, qb.indexOf("YDS") );

解析完所有字段后,按照您想要的格式和顺序打印它们