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中的这两个日期。我该怎么办?
你可以使用
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
这是您应该如何执行此操作的指南。我希望您编写自己的代码。
format.parse();
如果您不知道字符串的确切长度,即可以将 Jan 1st 2015 作为
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
,任何中间有多个空格的输入都不会匹配。好吧,直接一对一地获取您的代码。这就是你应该如何做的。
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");
}
你说你有一个格式为
DD MM YYYY DD MM YYYY
的字符串。我会简单地将这个输入分成六个部分,使用前三个部分来创建一个日期,最后三个部分作为另一个日期。
String input = "01 01 2015 10 10 2015";
String[] parts = input.split ( " " );
int d1 = Integer.parseInt ( parts[ 0 ] );
int m1 = Integer.parseInt ( parts[ 1 ] );
int y1 = Integer.parseInt ( parts[ 2 ] );
int d2 = Integer.parseInt ( parts[ 3 ] );
int m2 = Integer.parseInt ( parts[ 4 ] );
int y2 = Integer.parseInt ( parts[ 5 ] );
在现代 Java 中,切勿使用
Date
、Calendar
或 SimpleDateFormat
。这些存在严重缺陷的类是遗留类,被 Java 8+ 中内置的 java.time 类所取代,并在 JSR 310 中定义。
java.time.LocalDate
类。
LocalDate start = LocalDate.of ( y1 , m1 , d1 ) ;
LocalDate end = LocalDate.of ( y2 , m2 , d2 ) ;
获取该范围内所有日期的Stream。筛选出第 13 个。并过滤那些星期五。
List < LocalDate > fridaysTheThirteenth =
start
.datesUntil ( end )
.filter ( date -> date.getDayOfMonth ( ) == 13 )
.filter ( date -> date.getDayOfWeek ( ) == DayOfWeek.FRIDAY )
.toList ( );
第十三号星期五 = [2015-02-13, 2015-03-13]