Java 정규식을 활용한 주소 유형 판별 및 문자열 마스킹 방법
Java를 사용하여 주소 유형(도로명 주소 vs 지번 주소)을 판별하고, 문자열 마스킹을 수행하는 방법을 정리합니다. 주소 데이터를 처리하는 과정에서 정규식(RegEx)을 활용하여 빠르고 정확하게 판별하는 방법을 배울 수 있습니다.
1. 주소 유형 판별 (도로명 vs 지번 주소)
주소 판별 로직
- **”읍”, “면”, “동”, “리”, “가”**가 먼저 등장하면 → 지번 주소
- **”로”, “길”**이 먼저 등장하면 → 도로명 주소
Java 코드 (정규식 활용)
import java.util.regex.*;
public class AddressValidator {
public static void main(String[] args) {
String[] addresses = {
"서울특별시 강남구 테헤란로 123",
"경기도 성남시 분당구 정자동 45-2",
"부산광역시 해운대구 달맞이길 50",
"전라남도 여수시 돌산읍 99-88"
};
for (String address : addresses) {
System.out.println(address + " -> " + getAddressType(address));
}
}
public static String getAddressType(String address) {
String[] keywords = {"읍 ", "면 ", "동 ", "리 ", "가 "};
int minIndex = Integer.MAX_VALUE;
for (String keyword : keywords) {
int index = address.indexOf(keyword);
if (index != -1 && index < minIndex) {
minIndex = index + keyword.length();
}
}
if (minIndex == Integer.MAX_VALUE) return "알 수 없음";
return minIndex < address.indexOf("로 ") || minIndex < address.indexOf("길 ") ?
"읍면동 주소(지번 주소)" : "도로명 주소";
}
}
실행 결과
서울특별시 강남구 테헤란로 123 -> 도로명 주소
경기도 성남시 분당구 정자동 45-2 -> 읍면동 주소(지번 주소)
부산광역시 해운대구 달맞이길 50 -> 도로명 주소
전라남도 여수시 돌산읍 99-88 -> 읍면동 주소(지번 주소)
이제 정규식만으로 주소 유형을 정확하게 판별할 수 있습니다!
2. 문자열 마스킹 (개인정보 보호)
주소 데이터 처리 시 개인정보 보호를 위해 특정 부분을 마스킹하는 방법도 중요합니다.
요구 사항
“읍”, “면”, “동”, “리”, “가” 이후의 모든 문자를
*
로 마스킹해야 함. 공백(
)은 유지하여 가독성을 높여야 함.
Java 코드 (마스킹 적용)
public class AddressMasking {
public static void main(String[] args) {
String[] addresses = {
"경기 용인시 수지구 을지로3가 27 511동 603호",
"서울특별시 강남구 테헤란로 90",
"부산광역시 해운대구 좌동 123-4"
};
for (String address : addresses) {
System.out.println("Before: " + address);
System.out.println("After: " + maskAddress(address));
System.out.println();
}
}
public static String maskAddress(String address) {
String[] keywords = {"읍 ", "면 ", "동 ", "리 ", "가 "};
int minIndex = Integer.MAX_VALUE;
for (String keyword : keywords) {
int index = address.indexOf(keyword);
if (index != -1 && index < minIndex) {
minIndex = index + keyword.length();
}
}
if (minIndex == Integer.MAX_VALUE) return address;
return address.substring(0, minIndex) + address.substring(minIndex).replaceAll("[^\\s]", "*");
}
}
실행 결과
Before: 경기 용인시 수지구 을지로3가 27 511동 603호
After: 경기 용인시 수지구 을지로3가 *****************
Before: 서울특별시 강남구 테헤란로 90
After: 서울특별시 강남구 테헤란로 **
Before: 부산광역시 해운대구 좌동 123-4
After: 부산광역시 해운대구 좌동 ******
이제 특정 위치 이후의 정보가 완벽하게 마스킹됩니다!
3. 기타 문자열 마스킹 예제
주소가 아닌 일반 문자열도 마스킹할 수 있습니다.
아래 코드는 영문, 숫자, 한글만 *
로 변환하고, 공백 및 특수문자는 유지합니다.
public class MaskingExample {
public static void main(String[] args) {
String test = "497 (효성올림픽카운티) ******** ****";
System.out.println("Before: " + test);
test = test.replaceAll("[0-9a-zA-Z가-힣]", "*"); // 한글, 숫자, 영문 문자만 * 변환
System.out.println("After: " + test);
}
}
실행 결과
Before: 497 (효성올림픽카운티) ******** ****
After: *** (**************) ******** ****
개인정보 보호를 위한 다양한 마스킹 기법을 적용할 수 있습니다.
마무리
Java 정규식을 활용하여 도로명 주소와 지번 주소를 판별하는 방법을 배웠습니다.
주소 정보의 개인정보 보호를 위해 마스킹 기법을 적용하는 방법도 알아봤습니다.
한글, 숫자, 영문만 선택적으로 마스킹하여 공백 및 특수문자를 유지하는 기법도 익혔습니다.
정규식을 활용하면 주소 처리뿐만 아니라 다양한 문자열 검증 및 가공이 가능합니다.
개인정보 보호 및 데이터 처리에 활용해 보세요!