Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查用户输入插入的字符串是否对应于特定格式_Java_String_Date_Joptionpane - Fatal编程技术网

Java 检查用户输入插入的字符串是否对应于特定格式

Java 检查用户输入插入的字符串是否对应于特定格式,java,string,date,joptionpane,Java,String,Date,Joptionpane,我有一个方法,要求用户以特定的格式输入(日期)——DD/MM/YYYY,并且我使用此代码通过这种方式部分限制了用户输入 date.matches("[0-9]+[0-9]/[0-9]+[0-9]/[0-9]+[0-9]+[0-9]+[0-9]")); 但是我仍然在输入上遇到了问题,因为如果用户插入12121/12121212/12121这样的日期,它会像一个好的输入一样接受它并继续前进 输入cicle由使用JOptionPane的这部分代码确定 String date = JOptionPa

我有一个方法,要求用户以特定的格式输入(日期)——DD/MM/YYYY,并且我使用此代码通过这种方式部分限制了用户输入

date.matches("[0-9]+[0-9]/[0-9]+[0-9]/[0-9]+[0-9]+[0-9]+[0-9]"));
但是我仍然在输入上遇到了问题,因为如果用户插入12121/12121212/12121这样的日期,它会像一个好的输入一样接受它并继续前进

输入cicle由使用JOptionPane的这部分代码确定

String date  = JOptionPane.showInputDialog(frame,"Inserisci la data di partenza separata da / (GG/MM/AAAA):");
    if (date ==null) { return;}
    while (!date.matches("[0-9]+[0-9]/[0-9]+[0-9]/[0-9]+[0-9]+[0-9]+[0-9]")) {          
        JOptionPane.showMessageDialog(frame, "Data inserita errata");
        date  = JOptionPane.showInputDialog(frame,"Inserisci la data di partenza separata da / (GG/MM/AAAA):"); }
然后我使用

String[] parts = date.split("/");
    int year = Integer.parseInt(parts[2]);
    int month = Integer.parseInt(parts[1]);
    int day = Integer.parseInt(parts[0]);

如何限制插入字符串的位数?您应该尝试将其作为给定格式的日期进行解析,并捕获解析错误。查看

删除正则表达式中的所有
“+”
。您可以尝试使用SimpleDataFormat解析字符串,捕获异常并返回false。这可能是最肮脏但最简单的方法完美thx如此之多的Flavio它工作完美注意你仍然可以输入54/23/2014之类的东西,所以这还远远不够完美!正如其他人所说,您可能应该使用日期解析器。