0

なんらかの理由で、入力したものはすべて空の行を取得し続け、入力を読み取り、不要な空白をすべて削除するプログラムを作成しようとしていますが、各単語の間に1つのスペースがあります。次に、すべての行を印刷します。

センチネルを使用して停止することはありません。

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

                }

         }
}
4

3 に答える 3

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

これにより、プログラムが実際に開始される前にすべての入力が読み取られます。

その後 (プログラムがそこまで到達した場合でも、STDIN は通常、コンソールで終了することはありません)、scan は 2 番目のループで読み取るものがなくなります。

また、小文字のクラス名は、大文字の変数名と同じくらい混乱を招きます。少なくともここでは一貫しています;-)

于 2013-03-27T04:41:18.127 に答える
1
while (scan.hasNextLine()) {
    count++;
    scan.nextLine();
}

これは私には無限ループのようです。コンソールからの入力を読み続けるだけです。あなたはタイプし続け、これは読み続けます。

于 2013-03-27T04:41:22.583 に答える
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) ;
  }
}        
于 2013-03-27T07:04:41.047 に答える