0
static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                
        myString =stringBuilder.append(string);
        String h=myString.toString();
        **System.out.println(h);**
        }

    }




static void parse(String fileName) throws IOException{
    FileReader fileReader=new FileReader((fileName));
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder stringBuilder=new StringBuilder();
    String string;
    StringBuilder myString = null;
    while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }

       **System.out.println(h);**  
    }

コードの 2 番目の部分を試してみると、何も出力されません。whileループの外でh文字列全体を取得するにはどうすればよいですか? 変数 h をローカル変数ではなくインスタンス変数として宣言する必要がありますか?

4

3 に答える 3

2

インスタンス変数を作成する必要はありません。ループの外側にhを置くだけです:-

static void parse(String fileName) throws IOException{
FileReader fileReader=new FileReader((fileName));
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuilder stringBuilder=new StringBuilder();
String string,h=null;
StringBuilder myString = null;
while((string = bufferedReader.readLine()) != null) {                
    myString =stringBuilder.append(string);
    h=myString.toString();
    }
   System.out.println(h);
}
于 2012-11-19T05:06:41.043 に答える
1

while ループ内で h を初期化しました ループ外ではアクセスできません

while((string = bufferedReader.readLine()) != null) {                 
        myString =stringBuilder.append(string);
        String h=myString.toString();
       }
       System.out.println(h);  

このように使用できます

String h;
 while((string = bufferedReader.readLine()) != null) {                 
           stringBuilder.append(string);
           }
       h=stringBuilder.toString();
       System.out.println(h);  
于 2012-11-19T04:55:55.467 に答える
0

while ループ内で h 変数を宣言しています。したがって、while ループの反復ごとに、その反復にスコープされた新しい h 変数が作成されます。

while ループの外側で宣言されていない限り、while ループの外側で h 変数にアクセスすることはできません。

ただし、あなたが書いた方法では、 h 変数も反復ごとに上書きされるため、最終結果は最後に h に入れられたものになります。

長期的には、このコードも大幅にクリーンアップされる可能性があり、h も必要ありません。

static void parse(String fileName) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(fileName));
    StringBuilder sb = new StringBuilder();
    while((String line = br.readLine()) != null) {                 
        sb.append(line);
    }

    System.out.println(sb.toString());  
}

私の構文を確認する必要がありますが、それはよりクリーンなはずです。

于 2012-11-19T04:54:45.637 に答える