-4

txtファイルから行を読み取り続け、後で処理するためにそれらを変数に保存する最良の方法が必要です。コード化する方法は知っていますが、文字列をどこかに保存するための最良の方法は考えられません。最後にそれらを編集して処理します:

Scanner in = new Scanner(new FileReader(filename));

    while(in.hasNextLine()){
        answer=in.nextLine();
        if (answer.contains("-")) {
            temp=answer.split(":");
            value=Integer.parseInt(temp[0]);
            freq=Integer.parseInt(temp[1]);
        }

    }

txt ファイルの最後に到達した後に必要なもの freq 値を比較し、小さいものから大きいものへとアーカイブしたい

4

3 に答える 3

2

ファイル全体を読み取る最も簡単な方法は、ファイルの便利なメソッドを使用することです。次に例を示します。

List<String> lines = Files.readAllLines(Paths.get("path/to/your/file"),
                             Charset.forName("UTF-8"));

次に、リストで作業し、行で必要なことを行うことができます。

于 2013-03-08T16:32:21.943 に答える
0

行を個別に保存する場合は配列を使用できます。それ以外の場合は、ファイルの内容を文字列変数に追加し続けます。

ただし、コンテンツをどのように処理するかを指定して、サポートできるようにする必要があります。

于 2013-03-08T16:27:31.243 に答える
0

このようなものは、スキャナーを使用して行う必要があります

Scanner s = new Scanner(file object pointing at file));
List<String> listOfLines = new ArrayList<String>();
while (s.hasNext()) {
   listOfLines.add(s.next());
}
s.close();

しかし、BufferedReaders やその他の Java クラスを使用して、さまざまな方法でそれを行うことができます。あなたの質問の要点は、どのデータ構造を使用するかということです。これは動的に大きくなるため、リストを使用する必要があります。ファイルの行数を前もって知っていない限り、配列は役に立ちません

アップデート:

val と freq を追加する場合は、別のクラスを作成します。

class StuffHolder {
   private final String val;
   private final String freq;

   public StuffHolder(String val, String freq) { 
      this.val = val;
      this.feq = freq;
   }
   //plus some getters

}

次に、リストを次のように更新します

List<StuffHolder> listOfLines = new ArrayList<StuffHolder>();

StuffHolder よりも適切な名前を思い付くことができると思います ;)

頻度を数えようとしている場合は、val がキーの場合はマップを使用する方がよいでしょう。Val はマップのキーである可能性があり、val のインスタンスが見つかるたびに値を 1 ずつ増やすことができます

于 2013-03-08T16:31:12.803 に答える