2017-10-24 1 views
0

私はフォーマットチェックをするつもりです。プログラムは、5/31/1987のような日付を尋ねることです。 3つの数字を3つの異なるintに格納します。しかし、私はデリミタを動作させることができませんでした。私はscanner.useDelimiter("[/\n]")を使いたくないので、区切り記号で入力を終了する必要があるからです。デリミタを動作させるにはどうすればよいですか?

import java.util.Scanner; // program uses class Scanner 

public class DelimiterPlay { 
    public static void main(String[] args) { 

     Scanner reader = new Scanner(System.in); 
     System.out.println("Please enter a date to be checked using the format mm/dd/yyyy."); 
     reader.useDelimiter("/"); 

     int mm = reader.nextInt(); 
     int dd = reader.nextInt(); 
     int yy = reader.nextInt(); 

     System.out.println("Your date is " + mm + ":" + dd + ":" + yy); 

    } 
} 
+0

心配はいりません。区切り文字に何を使用しても、スキャナは区切り文字で終わる入力を常に要求します。 –

答えて

0

文字列が最初に、次のように、区切り文字で入力を分割するよう、全体の入力を取得され、これをアプローチする別の方法:

import java.util.Scanner; // program uses class Scanner 

public class DelimiterPlay { 
    public static void main(String[] args) { 

     Scanner reader = new Scanner(System.in); 
     System.out.println("Please enter a date to be checked using the format mm/dd/yyyy."); 
     String[] test = reader.nextLine().split("/"); 

     int mm = Integer.parseInt(test[0]); 
     int dd = Integer.parseInt(test[1]); 
     int yy = Integer.parseInt(test[2]); 

     System.out.println("Your date is " + mm + ":" + dd + ":" + yy); 

    } 
} 
0

reader.useDelimiter("[/\\p{javaWhitespace}]+")を試してみてください。区切り文字として/と空白文字の両方を使用しています。

デリミタとして/を使用しているため、コードが機能しません。つまり、トークンに空白文字(空白、タブ、改行)が表示されます。だから、これは10/24/2017/...のような入力しか受け付けません。また、入力が10/24/2017\nの場合、3番目のトークンは2017\nになります。これは、スキャナがintとして解析しようとすると、不一致例外が発生します。

また、現在の行でパターン検索を試すこともできます。

import java.util.Scanner; // program uses class Scanner 
import java.util.regex.MatchResult; 

public class DelimiterPlay { 
    public static void main(String[] args) { 
     try (Scanner reader = new Scanner(System.in)) { 
      do { 
       System.out.println("Please enter a date to be checked using the format mm/dd/yyyy."); 
       if (reader.findInLine("(\\d+)/(\\d+)/(\\d+)") != null) { 
        MatchResult result = reader.match(); 
        int dd = Integer.parseInt(result.group(1)); 
        int mm = Integer.parseInt(result.group(2)); 
        int yy = Integer.parseInt(result.group(3)); 
        System.out.println("Your date is " + mm + ":" + dd + ":" + yy); 
        break; 
       } else { 
        reader.nextLine(); 
       } 
      } while (true); 
     } 
    } 
} 
関連する問題