Какой лучший способ замаскировать строку в Java? - PullRequest
0 голосов
/ 13 марта 2020

Я хочу применить маску к строке "96506550", но вместо 96506-550

//my method
public String format(String data, String mask) {
        MaskFormatter mf = new MaskFormatter(mask);        
        return mf.valueToString(data);
}

System.out.println(formatter.format("96506550","#####-###"));
я получаю 965065-50 *1001* *1002*

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Вам нужно обработать 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));
}
0 голосов
/ 13 марта 2020

Вы забыли использовать

public void setPlaceholderCharacter(char placeholder)

Эта функция устанавливает символ для использования вместо символов, которых нет в значении, ie пользователь должен их заполнить. Значением по умолчанию является пространство. Это применимо только в том случае, если строка заполнителя не была указана или не полностью заполняет маску.

По этой причине возникает ошибка в одном символе.

...