0

ユーザーが特定の形式で文字列を入力したかどうかを確認しようとしています。私はそれを学んでいないので、SimpleDateFormat、catch、split、またはそれらの行に沿って何かを使用することはできません. 私は非常に初心者レベルで、文字列の使用方法と操作方法を学びました。ユーザーは mm/dd/yyyy (私は JOptionPane を使用しています) と入力する必要があるため、文字列です。月、日、年を部分文字列として取り出しました (別の用途のために整数に変換しました)。ただし、m/dd/yy と入力するとすべてがうまくいきません。人々が指示に従っているとは信じられないので、間違った入力をキャッチする何かが必要です。グレゴリオ暦について学びましたが、それが役立つかどうかはわかりません。最後に、配列を使用して mm/dd/yyyy を MMM/dd/yyyy に変換する必要があります。そのため、最初にエントリが有効であることを確認するつもりでしたが、次に、整数に変換し、その数値を使用して月の配列と一致させます。次に、日が月の日数内にあることを確認します。最後に、その年の日付を指定する必要があるため、(?) を整数に解析しました。ユーザーが正しく入力する限り、他のすべてが機能します。他の編集を提案してください。オブジェクトを使用しようとしましたが、非常に苦労したため、並列配列に変更しました。

import javax.swing.*;
import java.util.*;
public class ConvertDate
{
    public static void main(String[] agrs)
{

        int numOfDay;
        String date, mnthName = "";
        int monthNumber, dayNumber, yearNumber;
        String month = "", day = "", year = "";
        int validDays = 31;

        int monthNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        String[] monthName = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; 
        int[] daysInMonth = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        date = JOptionPane.showInputDialog(null, "Please enter a date. Use format mm/dd/yyy");
        month = date.substring(0, 2);
        day = date.substring(3, 5);
        year = date.substring(6, 10);
        yearNumber = Integer.parseInt(year);
        monthNumber =  Integer.parseInt(month);
        dayNumber = Integer.parseInt(day);

        for(int x = 0; x < 12; x++)
        {
            if(monthNumber == monthNum[x])
            {
                mnthName = monthName[x];
                validDays = daysInMonth[x];
            }
        }

        GregorianCalendar dayOfYear = new GregorianCalendar(yearNumber, (monthNumber - 1), dayNumber);
        numOfDay = dayOfYear.get(GregorianCalendar.DAY_OF_YEAR);

        if(dayNumber > validDays || dayNumber < 0 || monthNumber < 0 || monthNumber > 12)
// if(!date.equals("**/**/****"))  does not work, nor if(!date.equals(**"/"**"/"****))
            JOptionPane.showMessageDialog(null, "Invalid date or invalid format.");
        else
            JOptionPane.showMessageDialog(null, mnthName + " " + dayNumber + ", " + year + " is \nthe " + numOfDay + " day of the year.");

    }       
}
4

4 に答える 4

1

正規表現を使用して、ユーザーの入力が必要な形式と一致するかどうかを確認できます。

date = JOptionPane.showInputDialog(null, "日付を入力してください。mm/dd/yyy の形式を使用してください"); boolean bool = data.match("[0-9]{2}//[0-9]{2}//[0-9]{4}");

于 2013-09-29T06:12:40.847 に答える
0

適切な形式であることを確認する最善の方法は、ユーザーが自由形式のテキストを入力できないようにすることです。代わりに日付ピッカー (カレンダー、ドロップダウン メニューなど) を使用してください。

ここでは、いくつかの Java 日付ピッカーについて説明します: 優れた Java 日付選択 Swing GUI ウィジェットとは?

于 2013-09-29T06:23:52.830 に答える
0

日付if(year.length != 4)が他の方法で入力された場合、4 文字以外の結果になります。また、「/」の文字を取得するように変更したため、2013 年 6 月 23 日を入力できません (4 年文字になります)。

于 2013-09-29T15:20:20.347 に答える