0

ウェブサイトから情報を抽出するために使用した方法があり、現在は 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 であることに注意してください)

4

2 に答える 2

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);
    }
}

Collections.sort() がソート方法を認識できるように、クラスは Comparable を実装する必要があります。また、 equals() と hashCode() を実装することは常に良い考えです。

于 2013-11-13T00:22:23.933 に答える
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") );

すべてのフィールドを解析したら、必要な形式と順序でそれらを印刷します

于 2013-11-13T02:04:51.910 に答える