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

当我尝试代码的第二部分时,它什么也没有打印出来。如何在 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 回答