0

x行のテキストファイルがあります。各行は整数を保持します。ユーザーがボタンをクリックすると、actionlistenerを介してアクションが実行され、テキストファイルに表示されているすべての値が一覧表示されます。ただし、現在、linenumを10に設定しています。これは、10行のテキストファイルでのみ機能するコードをすでに記述していることを意味します。したがって、テキストファイルに3行/行のデータしかない場合...それらの行が一覧表示され、残りの7行については「null」が吐き出されます。

省略記号を使用して、正確な値がわからないことをプログラムに通知する方法があることを思い出しますが、最後に、指定された情報に基づいて値を計算します。私が与えた情報は、numbers(data)の行数になります。

以下はコードの一部です。

private class thehandler implements ActionListener{     
public void actionPerformed(ActionEvent event){
BufferedReader inputFile=null;          
try {
    FileReader freader =new FileReader("Data.txt");
    inputFile = new BufferedReader(freader); 

    String MAP = "";
    int linenum=10;
    while(linenum > 0)
        { 
    linenum=linenum-1; 
    MAP = inputFile.readLine();//read the next line until the specfic line is found 

    System.out.println(MAP);
    }

    } catch( Exception y ) {    y.printStackTrace();    } 

}}  
4

3 に答える 3

1

次の行の代わりに配置linenum > 0して次の行(MAP = inputFile.readLine()) != null を削除すると、次回linenum=linenum-1; MAP = inputFile.readLine();は少しグーグルすると役立つ場合があります+)最後の行のnull値は、その行を現在の行に設定して、 null値なので、最後の行がnullの場合、それは出力されません。10行の制限はどうですか?簡単に行うことができます。forループにインデックスを追加してインデックスを作成し、&&でiが10未満かどうかを確認できます。

于 2010-12-23T16:49:44.140 に答える
1

BufferedReader.readLine()から返される値をテストします。これがヌルの場合は、次のようにループを停止します。

BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println(line);
    }
} finally {
    reader.close();
}

編集:最初の10行を取るという要件を忘れた場合、上記のコードを変更して出力をリストに入れ、リストを返すことができます。次に、次のような関数でフィルター処理できます。

public List<String> takeFirst(int howMany, List<String> lines) {
 return lines.size() <= howMany ? lines : lines.subList(0, howMany);
}

もちろん、ファイルが巨大な場合、これは非効率的であり、それが重要な場合は、次のようなことを行うことになります。

BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
    int linesRead = 0;
    for (String line; (line = reader.readLine()) != null && linesRead < 10;) {
        System.out.println(line);
        linesRead += 1;
    }
} finally {
    reader.close();
}

これは醜いですが、必要な行だけを読み取ります。

于 2010-12-23T16:51:26.653 に答える
0

値がnullの場合にMAPを出力しないのはどうですか?

于 2010-12-23T16:49:56.447 に答える