1

次の情報を含むテキスト ファイルをスキャンする Java プログラムがあります。

上級武術卒業証書
(バーバンクス忍者学校)
アドキンス、スコット 72
ブラック、ジャック 44
キャラダイン、デビッド 81
チャン、ジャッキー 75
チョウ、スティーブン 77
チョウ、ユンファット 79
ジャー、トニー 71
リー、ブルース 76
リー、ジェット 76
ノリス、チャック71
オーデカーク、スティーブ 58
リーブス、キアヌ 62
ウワイス、イコ 75
イェン、ドニー 80
ヨー、ミシェル 79
チャン、ツィイー 75

パイロット (宇宙艦隊アカデミー)
アーチャー、ジョナサン 71
ジェインウェイ、キャスリン 74
カーク、ジェームズ T. 79
ピカード、ジャン リュック 85
パイク、クリストファー 80
ライカー、ウィリアム 79

アドバンスド アクション ヒーローズ (ディズニー U)
アラジン 91
ベネディクト、ジュリアス 45
ブリューワー、ゴーディ 82
コナン 60
ダック、ドナルド 40
アイインクレディブル、ミスター 85
マトリックス、ジョン 64
マウス、ミッキー 51
オーウェンズ、レイ 82
ポピンズ、メアリー 85
クエイド、ダグラス 75
リチャーズ、ベン 68
シンバ 80
スレーター、ジャック 80
ターミネーター、ザ 90
タリー、ルイ DNFの

服装、ポイズ & グレース

ビーバー、ジャスティン 33
ブロック、サンドラ 80
チッコーネ、マドンナ 60
サイラス、マイリー 40
ガガ、レディ 50
ローパー、シンディ 55
ミナージュ、ニッキー 45
サーキシアン、シェール 75

以上です、皆さん!

テキストファイルをスキャンしてフォーマットされた値を返すこれまでのコードは次のとおりです。

public static void main(String[] args) throws Exception {
    Scanner fileScanner = new Scanner(new File("lists.txt"));
    String line = fileScanner.nextLine().trim();

    String programName;
    String schoolName;
    String topStudent;
    int topGrade;



    while (!line.equals("That's All, Folks!")) {
        //extract a program's information
        System.out.println("");
        System.out.println(line.trim());
        line = fileScanner.nextLine().trim();
        line = line.replaceAll("\\s+", " ");
        System.out.println("");
        while (!line.isEmpty()) {

            //deal with one student                
            System.out.println(line);
            line = fileScanner.nextLine().trim();
            line = line.replaceAll("\\s+", " ");
        }
        //displays summary information for a program    
        line = fileScanner.nextLine().trim();
    }
}

これらの文字列をチェックすることになっています (名前が 1 つあるものもあれば、名前が 2 つあるものもあります。1 つには成績ではなく DNF があります)。以下のようにするには、各プログラムの各人の名前と最高成績のみを返すにはどうすればよいですか。

高度な武術の卒業証書
(バーバンクス忍者学校)
デイビッド・キャラダイン

パイロット
(宇宙艦隊アカデミー)
ジャン=リュック・ピカード

アドバンスド アクション ヒーローズ
ディズニー U)
アラジン

服装、落ち着き、優美さ
サンドラ・ブロック

編集:変数を追加

4

2 に答える 2

2

したがって、開始するのに適した場所は

line = line.replaceAll(", ", ",");
String[] split = line.split(" ");

分割配列では、人物の場合は [name, mark]、アカデミーの名前の場合は [name] になります。

于 2013-10-16T19:29:20.000 に答える
0

Stringしたがって、この時点では、 s を印刷してから捨てているように見えます。

また、いくつかの異なる種類の情報 (学院、名前、学年) を扱っているようです

Stringsだけを使用している場合、これを後で処理するのは困難です。まず、ファイルを解析するときにさまざまな種類の情報を保持するために、いくつかのデータ構造を構築します。

したがって、おそらく、多くのオブジェクトを持ち、それぞれに名前などAcademyを持つクラスを持つことができます.StudentStudent

于 2013-10-16T19:29:06.197 に答える