在我的程序中,我需要遍历各种日期。我正在用java编写这个程序,并且对读者有一些经验,但我不知道哪个读者最好完成这个任务,或者如果另一个类能更好地工作。 日期将输入到文本文件中,格式如下:
1/1/2013 to 1/7/2013
1/8/2013 to 1/15/2013
或者这种方式。我需要将每个日期范围分成6个局部变量用于循环,然后将它们更改为下一个循环。变量将被编码,例如:
private static String startingMonth = "1";
private static String startingDay = "1";
private static String startingYear = "2013";
private static String endingMonth = "1";
private static String endingDay = "7";
private static String endingYear = "2013";
我想这可以创建几个分隔符来寻找,但我不知道这将是最简单的方法。我一直在寻找this帖子寻求帮助,但似乎无法找到相关的答案。最好的方法是什么?
答案 0 :(得分:0)
String str = "1/1/2013 to 1/7/2013";
Pattern pattern = Pattern.compile("(\\d+/\\d+/\\d+)");
Matcher matcher = pattern.matcher(str);
matcher.find();
String startDate = matcher.group();
matcher.find();
String endDate = matcher.group();
String[] start = startDate.split("/");
System.out.println(start[0] + "-" + start[1] + "-" + start[2]);
String[] end = endDate.split("/");
System.out.println(end[0] + "-" + end[1] + "-" + end[2]);
...
<强>输出强>
1-1-2013
1-7-2013
答案 1 :(得分:0)
有几种选择。
您可以使用扫描仪,并将分隔符设置为包含斜杠。如果您希望值为整数而不是字符串,请使用sc.nextInt()
Scanner sc = new Scanner(input).useDelimiter("\\s*|/");
// You can skip the loop to just read a single line.
while(sc.hasNext()) {
startingMonth = sc.next();
startingDay = sc.next();
startingYear = sc.next();
// skip "to"
sc.next()
endingMonth = sc.next();
endingDay = sc.next();
endingYear = sc.next();
}
你可以像alfasin建议的那样使用正则表达式,但这种情况相当简单,所以你可以只匹配第一个和最后一个空格。
String str = "1/1/2013 to 1/7/2013";
String startDate = str.substring(0,str.indexOf(" "));
String endDate = str.substring(str.lastIndexOf(" ")+1);¨
// The rest is the same:
String[] start = startDate.split("/");
System.out.println(start[0] + "-" + start[1] + "-" + start[2]);
String[] end = endDate.split("/");
System.out.println(end[0] + "-" + end[1] + "-" + end[2]);