2017-04-27 144 views
1

存在我的程序的一部分,其中有一個問題。我想從文件中寫出字母。該文件包含一些字母和數字,每個單獨一行。 (我只需要「P」,「O」和「W」字母)我不明白爲什麼程序不輸出字母。代碼和下面的文件的圖像。文件掃描 - nextLine方法

http://i.imgur.com/sdyGkCn.jpg

File file = new File("file.txt"); 
     Scanner in; 
     try { 
      in = new Scanner(file); 

      while (in.hasNextLine()) 
      { 
       if(in.nextLine() == "W" || in.nextLine() == "O" || in.nextLine() == "P") 
       { 
        System.out.println(in.nextLine()); 
       } 
      } 


      in.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

回答

1

您的代碼跳過檢查一些行。每次打電話給in.nextLine()時,都會讀取第二行。

嘗試這種方式

File file = new File("file.txt"); 
    Scanner in; 
    try { 
     in = new Scanner(file); 

     while (in.hasNextLine()) 
     { 
      String MyLine = in.nextLine(); 
      if(MyLine.equals("W") || MyLine.equals("O") || MyLine.equals( "P")) 
      { 
       System.out.println(MyLine); 
      } 
     } 


     in.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
0

您應該使用string.equals(Object obj)方法來比較字符串。 運算符==只比較引用,但不檢查字符串的實際內容。

而且在這一行

if(in.nextLine() == "W" || in.nextLine() == "O" || in.nextLine() == "P") 

你得到新行每一次,你叫in.nextLine()方法

0

我定你的代碼:

File file = new File("file.txt"); 
    Scanner in; 
    try { 
     in = new Scanner(file); 

     while (in.hasNextLine()) { 
      String tmp = in.nextLine(); 
      if (tmp.equals("W") || tmp.equals("O") || tmp.equals("P")) { 
       System.out.println(tmp); 
      } 
     } 

     in.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

1)。總是使用方法equals來比較字符串。 2)。方法nextLine()應該在循環內部使用一次。每一次使用這個方法都會從文件中讀取下一行。