使用扫描仪&解析文本。 useDelimiter / right正则表达式

时间:2013-11-24 16:02:29

标签: java regex date java.util.scanner

我想计算两个日期之间的天数,但我在解析输入流时遇到问题......

如果我输入“22 1 2013”​​之类的日期,它可以正常工作,但我很难:

2013年1月22日

22-01-2013

2013年1月22日

不幸的是,我对正则表达式知之甚少,而且所有使用useDelimiter的测试都失败了;也许你可以帮助我(我只允许导入Scanner级):

import java.util.Scanner;

public class NewDateDifference {

public static void main(String[] args) {

    int day1, day2, month1, month2, year1, year2; 

    Scanner scan = new Scanner(System.in);

        System.out.print("First Date:\t");

        day1 = scan.nextInt(); 
    month1 = scan.nextInt(); 
    year1 = scan.nextInt();


    /**    scan = new Scanner(scan.next()).useDelimiter("\\.");
        if ( scan.hasNextInt() ) {
            day1 = scan.nextInt();
        }
        if ( scan.hasNextInt() ) {
            month1 = scan.nextInt();
        }
        if ( scan.hasNextInt() ) {
            year1 = scan.nextInt(); 
        }
        scan.close(); **/



        System.out.print("Second Date:\t");
        day2 = scan.nextInt(); 
        month2 = scan.nextInt();
        year2 = scan.nextInt(); 

        int diff = calculateDays(year2, month2, day2) - calculateDays(year1, month1, day1);
        System.out.println("Days: " + Math.abs(diff));

}

public static int calculateDays(int year, int month, int day) {

    int[] dayTillMonth = {0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337};

    if(month < 3) {
        year -= 1; month += 9;
    } else {
        month -= 3;
    }
    return year * 365 + year/4 - year/100 + year/400 + dayTillMonth[month] + day;
}
  }

2 个答案:

答案 0 :(得分:1)

尝试使用此分隔符

scan.useDelimiter("[\\s.\\-/]+");

它会将一个或多个字符设置为分隔符

  • \\s空格,如\r\n
  • .
  • -
  • /

答案 1 :(得分:0)

取消注释代码中的注释部分,并使用以下内容:

.useDelimiter("."); //for 22.1.2013
.useDelimiter("\\"); //for 22\1\2013
.useDelimiter("/"); //for 22/1/2013 (most used i think)
.useDelimiter("-"); //for 22-1-2013