1

在我的程序中,我需要遍历各种日期。我正在用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";

我想这可以通过创建几个分隔符来查找,但我不知道这将是最简单的方法。我一直在看这篇文章寻求帮助,但似乎找不到相关的答案。解决此问题的最佳方法是什么?

4

2 回答 2

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]);
于 2013-11-04T22:27:30.550 回答
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
于 2013-11-04T22:16:42.960 回答