SimpleDate类的线程“main”java.util.InputMismatchException中的异常

时间:2014-02-16 20:46:26

标签: java

此程序用于转换ISO日期(例如:2014-02-15)并能够将其转换为“2014年2月15日”,但我遇到构造函数问题,这是我到目前为止所做的:

public SimpleDate(String isoDate)
{
        // test print
       System.out.println(isoDate);

       Scanner sc = new Scanner(isoDate);
       sc.useDelimiter("­-");

       this.year = sc.nextInt();
       this.month = sc.nextInt();
       this.day = sc.nextInt();

       System.out.println(year);
}//constructor

我在main中进行了测试:

public static void main(String[] args)
{

       SimpleDate date = new SimpleDate("2014-12-12");

}//main

当运行代码时,我在构造函数中获取测试打印以执行但我很快就会收到此错误:

Test Print: 2014-12-12
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at SimpleDate.<init>(SimpleDate.java:19)
at SimpleDate.main(SimpleDate.java:68)

3 个答案:

答案 0 :(得分:1)

我建议使用“标准”日期类来执行这种简单的转换。此代码可以帮助您这样做:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDate {
private Date date ;
public SimpleDate(String isoDate) throws ParseException
{
    date = new SimpleDateFormat("yyyy-MM-dd").parse(isoDate);
}   
private String convert() {
    return new SimpleDateFormat("MMMMM d yyyy").format(date);
}
public static void main(String[] args) throws ParseException
{
     System.out.println( new SimpleDate("2014-02-15").convert());          

}//main

}

答案 1 :(得分:0)

由于您的分隔符为"",扫描程序会扫描您的输入并返回2014-12-12 - 您显然希望将字符串拆分为-

答案 2 :(得分:0)

替换

sc.useDelimiter("­-");

sc.useDelimiter("­\n|-");

因为Scanner要求您在结尾按Enter键。