2015-11-24 9 views
5

私はJavaを使ったオブジェクト指向プログラミングの序論から練習をしています。デリミタの使用法、スキャナが返されないのはなぜですか?

Page 73フルネームを要求し、区切り文字を使用してトークン化してそれを戻すコードを提供します。

import java.util.*; 

class Scanner1 
{ 
    public static void main(String[] args) 
    { 
     String name; 
     Scanner scanner = new Scanner(System.in); 

     scanner.useDelimiter(System.getProperty("line.separator")); 
     System.out.print("Enter full name (first, middle, last)"); 

     name = scanner.next(); 
     System.out.println("you entered " + name + "."); 
    } 
} 

問題は私が戻ってそれを印刷したいように見えるdoesntの、であり、それは、それを閉じるために、タスクマネージャの使用を強制的に、プログラムをフリーズします。

Running Program

これは、コンパイルし、エラーを提示していません。私は、区切り文字セクション(最後PIC)、それは一つの第一のトークンまでの最初のスペースに作品を削除する場合はスペルミスなど

IDE with Delimiter Code

をチェックするためにその上に数回してきました。したがって、エラーはデリミタコードのどこかにあります。

IDE without Delimiter Code

+8

投稿したコードがうまく動作します!あなたの入力後に "ENTER"を押していますか? – ParkerHalo

+0

出力ウィンドウを確認してください。 –

+5

使用しているIDEに問題があるようです。おそらく、ラインセパレータの違い – 6ton

答えて

5

あなたのIDEのコンソールは、行区切り文字を、[Enter]を考慮されていないようです。あなたのコードがうまく動作するかどうかを試す最善の方法は、コンパイルされたJavaファイルをターミナル(Windowsのコンソール)から直接呼び出すことです。もちろん、まずコンパイルされたJavaファイルが存続するディレクトリ(Scanner1.classファイルがあるディレクトリ)に移動する必要があります。

など。 javaのScanner1

あなたはシステムに依存しないようにしたい場合は、それを行うための最善の方法は、あなたが区切り記号を定義するか、単に方法.nextLine(に建て使用したことにより、パターンをコンパイルすることです)reference to Oracle docs

public class Main { 
    //These constant fields are from .nextLine() method in the Scanner class 
    private static final String LINE_SEPARATOR_PATTERN ="\r\n|[\n\r\u2028\u2029\u0085]"; 

    public static void main(String[] args){ 
     Scanner scanner = new Scanner(System.in); 
     scanner.useDelimiter(Pattern.compile(LINE_SEPARATOR_PATTERN)); 
     System.out.print("Enter name:"); 
     String name = scanner.next(); 
     System.out.println(name); 
    } 
} 
+0

コードを試しましたか? –

+1

コメントいただきありがとうございます。今はうまくいくはずです。なぜ私が間違った定数フィールドを使用したのかわかりません。 –