java 姓名脱敏正则,不使用replace
时间: 2025-01-03 15:43:58 浏览: 13
在Java中,如果你需要对姓名进行脱敏处理,通常是将敏感部分替换为星号(*)或其他随机字符,而不直接使用`replace()`函数。你可以通过字符串拼接和截取的方式实现这一目标,利用正则表达式匹配特定字符。例如,假设你想保留名字的第一个字母和姓氏的前两个字符,其余的替换为星号,可以这样做:
```java
public class NameSanitizer {
public static String anonymize(String fullName) {
if (fullName == null || fullName.isEmpty()) return fullName;
// 匹配姓氏,通常放在最后
int lastNameStart = fullName.lastIndexOf(' ');
if (lastNameStart <= 0) return fullName; // 如果没有空格,认为是单名
// 匹配名字,通常由首字母和剩余部分组成
int firstNameEnd = fullName.indexOf(' ', lastNameStart);
if (firstNameEnd <= 0) firstNameEnd = fullName.length();
// 创建新的字符串,保留首字母、姓氏前两个字符,其余用*
StringBuilder sanitizedName = new StringBuilder(fullName.substring(0, 1));
sanitizedName.append(fullName.substring(lastNameStart - 1, lastNameStart + 2).replaceAll(" ", "*"));
sanitizedName.append("*" * (fullName.length() - firstNameEnd - lastNameStart + 2));
return sanitizedName.toString();
}
}
```
阅读全文