2013-10-26 255 views
0

此代码的目标是读取一个文件并将数字添加到每个{(大括号)的末尾,但该文件并不像它在文件中那样输出每行,而是将其输出它整合成一条线。我在哪里放置System.out.println语句。我想每一个地方,并不断重复它输出不正确

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class Test { 

public static void main(String args[]) { 

     readFile(); 
} 

public static void readFile() { // Method to read file 

    Scanner inFile = null; 
    String out = " "; 

    try { 
     Scanner input = new Scanner(System.in); 
     System.out.println("enter file name"); 
     String filename = input.next(); 
     File in = new File(filename); // ask for the file name 
     inFile = new Scanner(in); 



     int count = 0; 
     while (inFile.hasNextLine()) { // reads each line 
      String line = inFile.nextLine(); 
      for (int i = 0; i < line.length(); i++) { 

       char ch = line.charAt(i); 
       out = out + ch; 

       if (ch == '{') { 
        count = count + 1;       
        out = out + " " + count + " "; 
       } else if (ch == '}') { 
        out = out + " " + count + " "; 
        if (count > 0) { 
         count = count - 1; 

        } 
       } 
      } 
     } 

     System.out.println(out); 

    } catch (FileNotFoundException exception) { 
     System.out.println("File not found."); 
    } 
    inFile.close(); 
} 
} 
+0

我会看看每个'nextLine()'的for循环结束。 –

+0

“文件不像文件中那样输出每行”是啊......因为根本没有输出。 – Tdorno

+0

@Tdorno它确实输出我需要它做的事情,但不是在单独的行上 – user2921727

回答

0

我在哪里放的System.out.println声明

整个输出是建立在一个单一的字符串,不打印,直到结束,所以在线循环中添加System.out.println语句将无济于事。您可以通过执行添加换行符字符串:

out += "\n"; 

或者说,你行的循环体的结束,打印当前行,并重置缓冲区的下一行:

System.out.println(out); 
out = ""; 

顺便说一下,对输出缓冲区使用字符串效率不高。字符串是不可变的,所以每个+语句都会复制和复制所有以前的字符,以便每次创建一个新对象。考虑将out声明为StringBuilder而不是String。然后你可以使用.append()方法添加它,并且它不会每次都复制所有文本,因为StringBuilder是可变的。