Java中掩盖字符串的最佳方式是什么?

3
我想在字符串“96506550”上应用一个掩码,但我得到的结果是965065-50而不是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","#####-###"));
2个回答

3
你忘记使用了


public void setPlaceholderCharacter(char placeholder)

该函数设置用于替换值中不存在字符的字符,即用户必须填写它们。默认值是一个空格。仅适用于占位符字符串未被指定或不能完全填充掩码的情况。

这就是为什么会出现单个字符占位符错误的原因。


谢谢!现在它可以工作了。 mf.setPlaceholderCharacter('_'); - Tito
如果有人遇到“无效字符”ParseException的问题,请注意,添加以下代码可以解决该问题:mf.setValueContainsLiteralCharacters(false);。在我的情况下,我的掩码不仅包含破折号,还包含点。我不确定这是否是问题所在。除此之外,其余部分与此问题及其答案的解决方案相同。 - Guilherme Taffarel Bergamin

0
你需要处理ParseException(或抛出它)。其次,你的Formatter不会接受格式不正确的输入。你的输入是八位数字,但你的格式要求五位数字,一个破折号和三位数字。你可以将八位数字作为特殊情况处理。另外,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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接