Это ожидаемое поведение - вы указываете объекту DateFormat ожидать шестнадцатизначное строковое представление даты, и это то, что вы передали. Пробелы анализируются ОК. Однако, если вы использовали «4x1x01», вы получите ошибку. Обратите внимание, что при разборе снисходительность по умолчанию равна true, например
DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("4 1 01"); // runs successfully (as you know)
DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("41 01"); // 5 character String - runs successfully
DateFormat df = new SimpleDateFormat("MMddyy");
df.setLenient(false);
Date date = df.parse("41 01"); // 5 character String - causes exception
DateFormat df = new SimpleDateFormat("MMddyy");
Date date = df.parse("999999"); // 6 character String - runs successfully
DateFormat df = new SimpleDateFormat("MMddyy");
df.setLenient(false);
Date date = df.parse("999999"); // 6 character String - causes exception
Если для параметра lenidity задано значение true (поведение по умолчанию), анализ выполняет попытку расшифровки неверного ввода, например 35-й день 31-дневного месяца становится 4-м днем следующего месяца.