
▶ 한글 이름
| 입력값 | 출력값 |
| 김 | * |
| 홍길 | 홍* |
| 홍길동 | 홍*동 |
| 이순신장군 | 이**** |
| 홍 길동 | 홍 *동 |
| 이 승 엽 | 이 * * |
▶ 영문 이름
| 입력값 | 출력값 |
| A | * |
| Jo | J* |
| Tom | T*m |
| Alice | A**** |
| John Smith | J*** S**** |
| Mary Jane Watson | M*** J*** W***** |
▶ 한문 이름
| 입력값 | 출력값 |
| 李 | * |
| 張偉 | 張* |
| 王小明 | 王*明 |
| 諸葛 亮 | 諸* * |
▶ 베트남어 이름
| 입력값 | 출력값 |
| An | A* |
| Minh | M*** |
| Nguyễn | N***** |
| Trần Văn Nam | T*** V** N** |
| Lê Thị Thu Hương | L* T** T** H**** |
▶ Java 다국어 이름 마스킹 소스 코드
/**
* 사용자 이름 마스킹
* 공백이 포함된 이름은 단어 단위로 분리하여 마스킹
* 공백이 없는 이름은 길이에 따라 마스킹 규칙 적용
* null 또는 공백만 있는 문자열은 그대로 반환
* 앞뒤 공백은 제거 후 처리
* 한글, 영문, 한문, 베트남어 등 문자 종류와 무관하게 동작
*/
public static String maskingUserName(String name) {
// null 이거나 공백만 있는 경우 그대로 반환
if (name == null || name.trim().isEmpty()) {
return name;
}
// 앞뒤 공백 제거
String trimmedName = name.trim();
// 이름에 공백(스페이스, 탭 등)이 포함되어 있는지 확인
boolean hasSpace = trimmedName.chars().anyMatch(Character::isWhitespace);
// 공백이 있는 이름 (예:"홍 길동", "John Smith")
if (hasSpace) {
// 연속 공백을 하나로 처리하여 분리
String[] parts = trimmedName.split("\\s+");
StringBuilder masked = new StringBuilder();
for (int i = 0; i < parts.length; i++) {
if (i > 0) {
masked.append(" "); // 단어 사이 공백 유지
}
masked.append(maskingSinglePart(parts[i])); // 단어 단위 마스킹
}
return masked.toString();
}
// 공백이 없는 이름
int length = trimmedName.length();
if (length == 1) {
return "*";
}
if (length == 2) {
return trimmedName.charAt(0) + "*";
}
if (length == 3) {
return trimmedName.charAt(0) + "*" + trimmedName.charAt(2);
}
// 길이 4 이상
return maskingSinglePart(trimmedName);
}
/**
* 공백으로 구분된 이름의 각 단어를 마스킹한다.
* 단어 길이가 1인 경우 "*"로 처리
* 단어 길이가 2 이상인 경우 첫 글자만 남기고 나머지는 "*" 처리
*/
private static String maskingSinglePart(String part) {
// null 또는 빈 문자열 방어 처리
if (part == null || part.isEmpty()) {
return part;
}
int length = part.length();
if (length == 1) {
return "*";
}
char first = part.charAt(0);
// 첫 글자 + 나머지 길이만큼 "*" 반복
return first + "*".repeat(length - 1);
}
'Java > 참고자료' 카테고리의 다른 글
| [Java] JDK 다운로드 (8, 11, 17, 21) (0) | 2025.12.05 |
|---|---|
| [Java] 로그 사용법 정리 (DEBUG / INFO / WARN / ERROR) (0) | 2025.11.27 |
| [Java] JPA vs Spring Data JPA (2) | 2025.08.09 |
| [Java] javax.annotation.Resource 오류 (1) | 2025.01.17 |
| [Java] Date & LocalDate & LocalDateTime 변수를 yyyyMMdd 문자열로 변환 (0) | 2024.09.13 |