2013-03-27 41 views
0

由於某種原因,我輸入的任何東西,我繼續獲得空行 我想做一個程序,讀取輸入,刪除所有不必要的空白,但每個單詞之間的一個空格。然後打印出所有的行。這段代碼有什麼問題?

不使用任何哨兵停止。

import java.util.Scanner ; 
import java.lang.Character; 
import java.lang.String ; 
public class trim 
{ 
     public static void main (String[]args) 
     { 

      String SongName = " " ; 
      String Song = " " ; 
      int i = 0 ; 
      int count = 0 ; 

       Scanner scan = new Scanner(System.in); 
       while(scan.hasNextLine()) 
       { 
        count++; 
        scan.nextLine(); 
       } 


       for ( ; i < count ; i ++) 
       { 
        if (scan.hasNext()) 
        { 
        SongName =scan.nextLine() ; 
        SongName = SongName.trim() ; 
        SongName = SongName.replaceAll("\\s+"," "); 
        if (Song== " ") 
        { 
        Song = SongName; 
        } 
        else 
        { 
        Song = Song + "\n" +SongName ; 
        } 
        } 
        System.out.println(Song) ; 

       } 

     } 
} 
+3

'if(Song ==「」)'在這裏可能不是您的問題,但請使用'equals'。 – Thilo 2013-03-27 04:39:51

+0

參考[this](http://v4all123.blogspot.com/2012/12/string.html)文章。我想你會得到它。 – Gunaseelan 2013-03-27 04:48:43

回答

5
while(scan.hasNextLine()){ 
     count++; 
     scan.nextLine(); 
} 

這將會讀取所有的輸入你的程序竟然真的開始之前。在這之後(如果程序甚至達到那麼遠,STDIN通常不會在控制檯上關閉),掃描在第二個循環中沒有更多內容要讀取。

此外,小寫類名與大寫變量名一樣令人困惑。至少你是否一致這裏;-)

+0

謝謝生病嘗試找出如何讓它來計算線路設置限制,然後返回並重新讀取輸入。即時通訊思想,我應該讓計數本身線程,只是運行該程序。然後讓我的主程序讀取輸入。 – 2013-03-27 05:26:10

1
while (scan.hasNextLine()) { 
    count++; 
    scan.nextLine(); 
} 

這似乎是一個無限循環給我。它只是保持從控制檯讀取輸入。你繼續打字,並繼續閱讀。

+0

不一定是無限的。關閉流,它會終止。但是第二個循環沒有更多可讀的內容。 – Thilo 2013-03-27 04:43:20

+0

當控件永遠不會離開它時,你將如何關閉這個流。 – SudoRahul 2013-03-27 04:43:50

+0

鍵入^ D,我想。 – Thilo 2013-03-27 04:44:47

0

將您的輸入添加到列表中,然後您可以繼續邏輯。我修改了下面的代碼。

import java.util.Scanner ; 
import java.util.ArrayList ; 
import java.lang.Character; 
import java.lang.String ; 

public class trim { 

public static void main (String[]args) { 
    String SongName = " " ; 
    String Song = " " ;   
    int count = 0 ; 
ArrayList lst = new ArrayList(); 

    Scanner scan = new Scanner(System.in); 
    while(scan.hasNextLine()) {     
     lst.add(scan.nextLine()); 
     count++; 
    } 

for (int i=0 ; i < count ; i ++) {     
    SongName = (String)lst.get(i); 
    SongName = SongName.trim() ; 
    SongName = SongName.replaceAll("\\s+"," "); 
    if (Song== " ") { 
     Song = SongName; 
    } 
    else { 
     Song = Song + "\n" +SongName ; 
    }     
    } 
System.out.println(Song) ; 
    } 
}   
+0

當我編譯該代碼我得到這個 注意:trim.java使用未經檢查或不安全的操作。 注意:使用-Xlint重新編譯:取消選中以獲取詳細信息。 – 2013-03-27 09:09:30