Вам нужно обработать ParseException
(или бросить его). Затем ваш Formatter
не примет ввод, который не правильно отформатирован. Ваш ввод состоит из восьми цифр, но ваш формат предполагает пять цифр, да sh, а затем три цифры. Вы могли бы обрабатывать восемь цифр как особый случай. Кроме того, MaskFormatter.valueToString(Object)
работает не так, как вы надеетесь (однако вы можете проверить это, вызвав MaskFormatter.stringToValue(String)
и передав его первой функции). Мол,
public static String format(String data, String mask) throws ParseException {
Pattern p = Pattern.compile("\\d{8}");
if (p.matcher(data).matches()) {
return data.substring(0,5) + "-" + data.substring(5);
}
MaskFormatter mf = new MaskFormatter(mask);
return mf.valueToString(mf.stringToValue(data));
}