2

我正在做一个 Java 任务来创建一个接受多种格式的日期的程序:

日必须是DD,月可以是MM(数字)或MMM(前 3 个字母),年可以是YYYYYY。分隔符可以是斜线、点或破折号。

要接受的输入示例:

  • 1/May/2001
  • 23.8.9
  • 7-01-01

我的问题是用户输入被字符串接受。所以我需要分隔分隔符之间的信息。

我应该用什么来做到这一点?建议我使用java.util.regex包?

4

5 回答 5

2

您可以创建不同格式的字符串并循环解析它们并SimpleDateFormat捕获ParseException. 这不是一个优雅的解决方案,但它应该可以工作。

您可以执行以下操作,根据您的需要进行调整:

String[] formatStrings = {"dd/MM/yyyy", "dd.mm.yy", "dd-mm-yyy"};

//...

Date tryParse(String dateString)
{
    for (String formatString : formatStrings)
    {
        try
        {
            return new SimpleDateFormat(formatString).parse(dateString);
        }
        catch (ParseException e) {
          \\you can log the error
         }
    }

    return null;
}
于 2013-08-22T10:43:23.063 回答
0

你自己说的,伙计。用来spit分割你的信息。您应该做的第一件事是检查他们使用的分隔符类型:

if(input.contains("/")
{
     delim = "/";
}
else if(input.contains(".")
{
     delim = ".";
     // you get the idea.
}

然后,您只需使用该split方法根据该分隔符将字符串分隔为单独的字符串:

String[] tokens = input.split(delim);

// Value in tokens for input "22/12/1985"

     [0] = "22"
     [1] = "12"
     [2] = "1985"

// Value in tokens for input "009/1990"

     [0] = "009"
     [1] = "1990"

编辑以包含一些正则表达式信息

您可以使用一些简单的正则表达式来拆分涉及查找分隔符的部分。

String pattern = "[/|-|\.| ]";
String[] values = input.split(pattern);

这将搜索"/""-""."" "

于 2013-08-22T10:36:29.873 回答
0

使用带有 SimpleDateFormat 类的掩码来获得您想要的内容:

例子:

SimpleDateFormat format = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
于 2013-08-22T10:36:33.113 回答
0

您的任务主要是关于检测格式,而不是在您知道格式后对其进行解析。正则表达式肯定会有所帮助,但它本身还不够。

我的建议是首先通过调用来检测使用了哪个分隔符String#indexOf,然后按该分隔符进行拆分,然后分析哪个部分意味着什么。在这一步中,正则表达式可能会派上用场。

编辑

实际上,ifology不需要检测分隔符:您可以在 上拆分[\-./],一次覆盖任何分隔符。

于 2013-08-22T10:37:12.327 回答
0

如果您想将日、月和年作为一个值,请使用拆分!

String date = "10/08/2003";
date.split("/");

你得到一个包含值的数组!

如果要检查字符串是否为有效日期,请使用正则表达式。最好是检查字符串是否有效!在此处使用本教程了解如何使用正则表达式检查日期。

使用包含来检查您必须使用的分隔符。因为使用正则表达式的有效日期只能将其放在正确的位置。

date.contains("/")

如果日期包含“/”,则此方法返回 true。你应该在 if 条件下使用它!

于 2013-08-22T10:37:19.647 回答