为什么java SimpleDateFormat可以解析带有额外字符的格式化文本?

Bug*_*ily 1 java simpledateformat

我正在使用MM-dd-yyyy HH:mm:ss格式从用户输入解析日期字符串,我发现12-20-2012 10:10:10 abcdexxxx也可以被删除.怎么会发生这种情况?这是我的代码:

SimpleDateFormat df = new SimpleDateFormat( "MM-dd-yyyy HH:mm:ss" );
String currColValue = "12-20-2012 10:10:10 abcdexxxx";
try{
    d=df.parse( currColValue );
}catch( ParseException e ){
    System.out.println("Error parsing date: "+e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

但是没有例外,String值被解析为Date.为什么?

rua*_*akh 10

根据方法的Javadocparse:

从给定字符串的开头解析文本以生成日期.该方法可能不使用给定字符串的整个文本.

(强调我的).

与上述评论的含义相反,这与宽松的解析无关; 相反,只是这个方法并不打算消耗整个字符串.如果您想验证它消耗的整个字符串,我想你可以建立一个ParsePosition对象,并使用双ARG过载,然后检查ParsePosition后,看它是否被解析到字符串的结尾.