变量只在循环中有值吗?

时间:2012-11-19 04:50:53

标签: java variables

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 String?我是否必须将变量h声明为实例变量而不是局部变量?

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);  

答案 2 :(得分:0)

你在while循环中声明你的h变量。因此,while循环的每次迭代都会创建一个新的h变量scopped到该迭代。

除非在while循环之外声明,否则您将无法访问while循环之外的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());  
}

你必须检查我的语法,但那应该更清晰。