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