java - 确定用户输入的字符串格式是否正确

标签 java arrays string

我正在尝试检查用户是否以特定格式输入了字符串。 我不能使用 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.");

    }       
}

最佳答案

您可以使用正则表达式来检查用户的输入是否符合您想要的格式。

date = JOptionPane.showInputDialog(null, "请输入日期。使用格式 mm/dd/yyy"); boolean bool = data.match("[0-9]{2}//[0-9]{2}//[0-9]{4}");

关于java - 确定用户输入的字符串格式是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074631/

相关文章:

java - 如何计算具有相同键的 HashMap 值的平均值

java - Tomcat:何时使用 keepgenerated = false

java - 系统中无法安装jdk-8u101-windows-x64

php - 转储到 JavaScript 数组的 HTML 文本破坏了我的代码

c# - 分离 ldap 连接字符串的最佳方法是什么?

java - 如何强制我在 Spring 中的所有页面使用 https 协议(protocol)

java - 使用递归,分离一个整数数组,使偶数在奇数之前

ios - 如何在准备中的 viewController 之间通过引用传递快速数组(对于 segue :?

php - 使用 PHP 将空格转换为破折号和小写

string - 生成特定格式的唯一字符串的算法