在 Java 中屏蔽字符串的最佳方法是什么?
Which is the best way to mask a String in Java?
我想在字符串“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","#####-###"));
您忘记使用
public void setPlaceholderCharacter(char placeholder)
此函数设置用于代替值中不存在的字符的字符,即用户必须填写它们。默认值为 space。这仅适用于未指定占位符字符串或未完全填满掩码的情况。
这就是出现单个字符占位符错误的原因。
你需要处理 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));
}
我想在字符串“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","#####-###"));
您忘记使用
public void setPlaceholderCharacter(char placeholder)
此函数设置用于代替值中不存在的字符的字符,即用户必须填写它们。默认值为 space。这仅适用于未指定占位符字符串或未完全填满掩码的情况。
这就是出现单个字符占位符错误的原因。
你需要处理 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));
}