2016-12-08 13 views
0

一度に1文字の文字列(1語の長さ)を1文字ずつ繰り返し、区切り文字を使用して新しい行のすべての文字を出力するメソッドを作成したいとします。これを行うために、私は正規表現(this post helped me the most for learning them)とスキャナで使用するパターンをコンパイルする方法に関するJavaのドキュメント(herehere)をすべて読んだ。このすべてを学んだ後、私は次のコードを作成しました:私は、この行でそれのテストを実行した正規表現を使用して文字列を一度に1文字ずつ繰り返しますか?

public static void stringPrinter(String whole){ 
     Pattern p = Pattern.compile(".{1}"); 
     Scanner scan = new Scanner(whole); 
     scan.useDelimiter(p); 
     for (int i = 0; i < whole.length(); i++){ 
      System.out.println(scan.next()); 
     } 
    } 

を:

stringPrinter("okay"); 

を今私の頭の中で次のように、これは動作するはずです

  • 文字列を取り込み、変数名wholeに設定します。
  • 変数pに保存されたパターンをコンパイルします。パターンは任意の1文字で構成されます。
  • 文字列wholeをスキャンするように設定されたScannerオブジェクトを作成します。
  • 私たちが定義したパターンpにスキャナの区切り文字を設定します(したがって、見つけた1文字ごとに停止します)。
  • これは、文字列の何度も、文字列wholeで実行されるループを実行します。
  • これが何度も実行されるという文は、1文字を見つけて、それをコンソールに出力します。
  • 出力 'o'、 'k'、 'a'、および 'y'はそれぞれ独自の行に表示されます。空白は希望ので、私はそれらの期間を追加し、それらの期間が存在しないことを除いて

    . 
    
    
    Exception in thread "main" java.util.NoSuchElementException 
        at java.util.Scanner.throwFor(Unknown Source) 
        at java.util.Scanner.next(Unknown Source) 
        at WholeNumber.stringPrinter(WholeNumber.java:37) 
        at WholeNumber.main(WholeNumber.java:28) 
        . 
    

    (ちょうど3上部の空白行と空白行が下にあります。

    しかし、それが与える実際の出力があります。ここに表示されます)。

    私は、スタックトレースに1つ余分な時間を反復することと関係があると思いますが、新しい文字はありません。

    . 
    

    (ちょうど空白行)

    だから、誰かが私を助けることができる:私は(forループ宣言されている)私のコードの最後の行に2つ目をコメントアウトしかし、場合でも、私はまだこの出力を取得します何が起こっているのか把握しますか?私は本当にこのプログラムの何が間違っているのか分かりません。どんな助けもありがとうございますので、事前に感謝します!

    P.S.はい、この質問を投稿する前にthis postをチェックしました。 .は文字が1つであることを確認してから、{1}を確認する必要があります。

    +0

    一度に文字列の1つの文字を超える_iterate_、または何をしたいですかコンソールから一度に1文字ずつ_read_したいですか? –

    +0

    ああ、申し訳ありませんが、私は、メソッドが受け取ったStringから一度に1文字ずつ読み込み、その後**出力するようにしたいと思います。 – Guy

    +1

    'for(int i = 0; i

    答えて

    -1

    あなたは、あなたは文字のそれぞれを反復することができますstring.toCharArray()

    で文字配列に文字列を有効にして印刷することができ、それ

    関連する問題