Date startdate=new Date();
Date enddate=new Date();
DateFormat format = new SimpleDateFormat("dd MM yyyy",Locale.US);
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String line1 = scanner.nextLine();
try{
startdate = format.parse(line);
}
catch(ParseException e){
System.out.println("Sorry!!");
}
try {
enddate = format.parse(line1);
}
catch(ParseException e){
System.out.println("Sorry!!");
}
如果我的日期在两个单独的行上给出,那么我的代码可以正常工作。但是我想让它适用于由空格分隔的同一行中的输入(两个日期之间以及日期月之间(每个日期的DD MM YYYY格式))。
输入如下:01 01 2015 10 10 2015
我需要分别在startdate和enddate中扫描这两个日期。我该怎么办?
答案 0 :(得分:1)
您可以使用substring
String Str = new String("01 01 2015 10 10 2015");
System.out.println(Str.substring(11) ); // 10 10 2015
System.out.println(Str.substring(0, 10) ); // 01 01 2015
答案 1 :(得分:0)
这是关于如何执行此操作的指南。我希望你能编写自己的代码。
format.parse();
答案 2 :(得分:0)
如果您不知道字符串的确切长度,即可以将2015年1月1日作为1 1 2015
或其他字符(例如多个空格)传递,请尝试使用正则表达式:
String input = "1 1 2015 10 10 2015";
SimpleDateFormat f = new SimpleDateFormat("dd MM yyyy");
Pattern p = Pattern.compile( "[0-9]{1,2} [0-9]{1,2} [0-9]{4}" );
Matcher m = p.matcher( input );
while( m.find() )
{
System.out.println( f.parse( m.group() ) );
}
表达式的简短细分:
[0-9]{1,2}
表示一个或两个ascii数字(\d
也会匹配非ascii数字)[0-9]{4}
正好意味着四个ascii数字x y z
匹配,并且其间具有多个空格的任何输入都不匹配。答案 3 :(得分:0)
好吧,将1对1指向您的代码。你应该怎么做。
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
Pattern pattern = Pattern.compile("[0-9]{1,2}\\s+[0-9]{1,2}\\s+[0-9]{4}");
Matcher m = pattern.matcher(line);
String d1 = null;
String d2 = null;
DateFormat format = new SimpleDateFormat("dd MM yyyy",Locale.US);
Date startDate = null;
Date endDate = null;
try {
if(m.find()) {
d1 = m.group();
startDate = format.parse(d1);
} else {
System.out.println("Sorry for date 1.");
}
if(m.find()) {
d2 = m.group();
endDate = format.parse(d2);
} else {
System.out.println("Sorry for date 2.");
}
} catch (ParseException e) {
System.out.println("Incorrect date format");
}