2016-11-15 8 views
2

私は、ユーザーの入力から複数行のテキストを読み込んで、アルファベットの各文字が文字列に表示される回数を表示する必要があるプログラムを作成しています。最後の行は、センチネル値として機能するピリオドで終わります。これはこれまで私が持っているものです:ユーザー入力から複数行のテキストを取得する方法はありますか?

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 


public class LetterCounter 
{ 

    public static void main(String[] args) 
    { 

    try { 
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 

      String lineOfText; 
      char letter, choice; 

      int countArray[] = new int[26]; 
      do 
      { 

       System.out.println("Enter the String (Ends with .):"); 
       while ((lineOfText = input.readLine()) != null) 
       { 

        for (int i = 0; i < lineOfText.length(); i++) 
        { 
         letter = lineOfText.charAt(i); 
         int index = getIndex(letter); 
         if (index != -1) 
         { 
          countArray[index]++; 
         } 
        }   
        if (lineOfText.contains(".")) 
         break; 
       } 

       System.out.println("Count Alphabets:"); 

       for (int i = 0; i < countArray.length; i++) 
       { 
        System.out.println((char) (65 + i) + " : " + countArray[i]); 
       } 

       //Ask user whether to continue or not 
       System.out.println("\nWould you like to repeat this task? (Press y to continue or n to exit program): "); 

      choice = input.readLine().toLowerCase().charAt(0); 

       System.out.println(); 

      } while (choice == 'y'); 

     } 

     catch (IOException e) 
     { 
      // Auto-generated catch block 
      e.printStackTrace(); 
     }  
    } 


    //method to get the index of alphabet 

    public static int getIndex(char letter) 
    { 
     if (Character.isAlphabetic(letter)) 
     { 
      if (Character.isUpperCase(letter)) 
      { 
       return (int) letter - 65; 
      } 

      else 
      { 
       return (int) letter - 97; 
      } 
     } 

     else 
     { 
      return -1; 
     } 

    } 
} 

私は複数行のテキストをどのように許可するのだろうと思いました。だから私は1つの行をすることができます。

+0

http://stackoverflow.com/questions/14169661/read-complete-file-without-using-loop-in-java –

+0

テキストファイルを使用していないので、ファイル全体を読むことができます。 – Derek

+0

多分 'Scanner'は助けます:http://stackoverflow.com/questions/2296685/how-to-read-input-with-multiple-lines-in-java – Philipp

答えて

-1

1行が読み込まれた後、BufferedReaderは、そのバッファに行に変換できるデータがないため、nullを返します。

「java.util.Scanner」クラスは、行が使用可能になるまでスレッドをロックし、プロセス内でヌルデータを返さない場合に適しています。

0

スキャナの区切り文字を変更すると、最初の入力でプログラムがaに達すると停止します。その後、彼はそれがときにもラインを読んで停止した以外のプログラムは、指定されたとおりに動作するようです

Scanner sc = new Scanner(System.in); 
    char choice = 'y'; 

    while (choice == 'y'){ 
     System.out.println("Enter the String (Ends with .):"); 
     sc.useDelimiter("\\."); 
     System.out.println(sc.next()); 
     //Ask user whether to continue or not 
     System.out.println("\nWould you like to repeat this task? (Press y to continue or n to exit program): "); 
     sc.useDelimiter("\n"); 
     sc.next(); 
     choice = sc.next().toLowerCase().charAt(0); 

    } 
+0

私の問題は、新しい行を開始するために「Enter」を押すと、「。」で終わることができなくなるということです。テキストの行を終了します。だから私は複数の行を表すためにただ1行にテキストを書きますか? – Derek

+0

私は問題を理解しているか分かりません。この実装は、 '.'があるまで複数の行を読み込みます。そうでなければ' .'の後に '\ n'が続くときに読み込みを止め、区切り文字を' '\。\\ n'に変更します。これは、 '.'または' \ n'のいずれかがある場合は読み込みを続けますが、 '。\ n'がある場合は停止します –

0

を続けたいかどうかを確認するために戻って、デフォルトに戻ります。行の途中です

関連する問題