在Java中,我必须使用RegEx和函数替换将字符串值包装到另一个字符串值。
示例1:什么将"123C5“(5个字符)替换为"*****"?
示例2:什么将"12354CF5214“(11个字符)替换为"*******5214"?只替换前7个字符
目前,我正在使用这个函数,但我需要优化它:
public String getMaskedValue(String value) {
String maskedRes = "";
if (value!=null && !value.isEmpty()) {
maskedRes = value.trim();
if (maskedRes.length() <= 5) {
return maskedRes.replaceAll(value, "$1*");
} else if (value.length() == 11) {
return maskedRes.replace(value.substring(0, 7), "$1*");
}
}
return maskedRes;
}有人能帮我吗?谢谢你的进阶
发布于 2020-04-22 12:13:43
您可以使用约束宽度后视解决方案,如
public static String getMaskedValue(String value) {
return value.replaceAll("(?<=^.{0,6}).", "*");
}见Java在线演示。
(?<=^.{0,6}).模式匹配字符串开头有0到6个字符的任何字符(但是一个行中断字符,用.)。
关于在Java regexps中使用lookbehinds的说明:
只要匹配字符串的长度在预先确定的范围内,✽Java就接受查找范围内的量词。例如,
(?<=cats?)是有效的,因为它只能匹配三个或四个字符的字符串。同样,(?<=A{1,10})也是有效的。
https://stackoverflow.com/questions/61364759
复制相似问题