我正在做一个 Java 任务来创建一个接受多种格式的日期的程序:
日必须是DD
,月可以是MM
(数字)或MMM
(前 3 个字母),年可以是YY
或YYYY
。分隔符可以是斜线、点或破折号。
要接受的输入示例:
1/May/2001
23.8.9
7-01-01
我的问题是用户输入被字符串接受。所以我需要分隔分隔符之间的信息。
我应该用什么来做到这一点?建议我使用java.util.regex
包?
您可以创建不同格式的字符串并循环解析它们并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;
}
你自己说的,伙计。用来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);
这将搜索"/"
、"-"
和"."
。" "
使用带有 SimpleDateFormat 类的掩码来获得您想要的内容:
例子:
SimpleDateFormat format =
new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
您的任务主要是关于检测格式,而不是在您知道格式后对其进行解析。正则表达式肯定会有所帮助,但它本身还不够。
我的建议是首先通过调用来检测使用了哪个分隔符String#indexOf
,然后按该分隔符进行拆分,然后分析哪个部分意味着什么。在这一步中,正则表达式可能会派上用场。
实际上,ifology不需要检测分隔符:您可以在 上拆分[\-./]
,一次覆盖任何分隔符。
如果您想将日、月和年作为一个值,请使用拆分!
String date = "10/08/2003";
date.split("/");
你得到一个包含值的数组!
如果要检查字符串是否为有效日期,请使用正则表达式。最好是检查字符串是否有效!在此处使用本教程了解如何使用正则表达式检查日期。
使用包含来检查您必须使用的分隔符。因为使用正则表达式的有效日期只能将其放在正确的位置。
date.contains("/")
如果日期包含“/”,则此方法返回 true。你应该在 if 条件下使用它!