如何从输入文件创建变量

时间:2013-11-04 22:09:13

标签: java bufferedreader sqldatareader

在我的程序中,我需要遍历各种日期。我正在用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帖子寻求帮助,但似乎无法找到相关的答案。最好的方法是什么?

2 个答案:

答案 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]);