質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

3171閲覧

[java][日付チェック]質問

kam112

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2015/06/16 03:03

java初心者です。
テキストファイルを一行づつ読み込んで行く時に、
32日や14月など、異常な日付が紛れていた場合例外として処理する方法はありますでしょうか?

while ((str = br.readLine()) != null) { // 1行ずつ読み込む

上記文の下に何かを配置するまではわかるのですが、
javaの日付チェックで調べてみても理解が足りず正解が出せずに困っております。

すみませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

以下の checkDate ような、日付が有効かどうかをチェックするメソッドを作成し、判定してみてはいかがでしょうか。

lang

1import java.text.DateFormat; 2import java.text.ParseException; 3 4public class sample { 5 public static void main (String[] args) { 6 7 if (checkDate("2014/01/02")){ 8 System.out.println("日付です"); 9 } else { 10 System.out.println("日付ではありません"); 11 } 12 } 13 14 public static boolean checkDate(String strDate) { 15 if (strDate == null || strDate.length() != 10) { 16 return false; 17 } 18 DateFormat format = DateFormat.getDateInstance(); 19 format.setLenient(false); 20 try { 21 format.parse(strDate); 22 return true; 23 } catch (Exception e) { 24 return false; 25 } 26 } 27}

参照:【Java】日付が有効かチェックする

投稿2015/06/16 03:25

f-hanako

総合スコア159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

試しに作ってみたので参考にでもしてみて下さい

java

1import java.io.*; 2import java.util.*; 3import java.nio.file.*; 4public class HT{ 5 6 7public static void main(String[] args){ 8 9 10try(BufferedReader br=new BufferedReader(new FileReader("C:\\file\\files\\t.txt"));){ 11 12String str=""; 13int fl3=0; 14 15while((str=br.readLine())!=null){ 16 17ArrayList<Character> i=new ArrayList<>(); 18for(int b=0;b<str.length();b++){ 19 20char g=str.charAt(b); 21 22int h=(int)g; 23 24if(48<=h && h<=57 && fl3==0){ 25i.add(g); 26 27fl3=1; 28}else if(48<=h && h<=57 && fl3==1){ 29i.add(g); 30 31}else if(fl3==1 && (h<48 || h>57)){ 32fl3=0; 33 34String j=str.substring(b,b+1); 35 36if(j.equals("日") || j.equals("月")|| j.equals("年")){ 37 38int y=1; 39int x=0; 40for(int o=i.size()-1;o>=0;o--){ 41 42int r=Character.getNumericValue(i.get(o)); 43x=x+r*y; 44 45y=y*10; 46} 47i=new ArrayList<Character>(); 48if(j.equals("日")){ 49if(x>31 || x<0){ 50System.out.println(x+"日"); 51throw new Exception();} 52} 53if(j.equals("月")){ 54if(x<0 || 12<x){ 55System.out.println(x+"月"); 56throw new Exception();} 57} 58if(j.equals("年")){ 59if(x<0){ 60System.out.println(x+"年"); 61 62throw new Exception();} 63} 64 65 66y=1; 67x=0; 68 69} 70 71 72 73} 74 75} 76 77 78 79} 80 81 82 83 84}catch(Exception e){ 85 86System.out.println("異常な数値が検出されました");} 87 88 89} 90 91 92}

投稿2016/11/01 00:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

初めまして。
CalendarやDateFormatのsetLenientを使用する方法を提案します。

lang

1try { 2 Calendar cal = Calendar.getInstance(); 3 cal.setLenient(false); 4 cal.set(year, month, day); 5 cal.getTime(); 6} catch (IllegalArgumentException e) { 7 // 日付が不正な場合の処理 8}

setLenientの引数にfalseを入れると厳密な日付チェックを行います。
日付がおかしければ例外をスローするのでこれを利用するのがいいかと思います。

投稿2015/06/16 15:50

chonbo2525

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

正規表現を使うのはいかがでしょうか?

以下、思いつきなのですが、もし、読み込むファイルの各行に現れる日付は、必ず

日付:YYYY/MM/DD

という形式で行に出現するという前提があるとします。(あくまで仮定です。)
ここでYYYY、MM、DDは実際は半角の数字ですが、数字であっても、日付として
不正な数字の並びが入ってくる可能性がある場合に
(たとえば、"2015/6/31" など)正規表現、

String regex = "日付:([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})";

ぐらいの緩い制約でマッチさせて、3つのカッコのそれぞれで取得できる文字列を
整数に変換したうえで、

boolean isValidDate(int year, int month, int day )

のようなメソッドに渡し、もしこれが falseを返したときにこのメソッドを
使う側で何らかの例外を発生させるとよいと思います。

isValidDate メソッドでは年月日を構成する数値として正しいか
どうか、たとえば、month=6月である場合には、day=31はNGなど
の判定を行うように実装します。

参考になりましたら幸いです。

投稿2015/06/16 03:21

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問