Java 정규식을 활용한 주소 유형 판별 및 문자열 마스킹 방법

📌 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 정규식을 활용하여 도로명 주소와 지번 주소를 판별하는 방법을 배웠습니다.
✔ 주소 정보의 개인정보 보호를 위해 마스킹 기법을 적용하는 방법도 알아봤습니다.
✔ 한글, 숫자, 영문만 선택적으로 마스킹하여 공백 및 특수문자를 유지하는 기법도 익혔습니다.

📢 정규식을 활용하면 주소 처리뿐만 아니라 다양한 문자열 검증 및 가공이 가능합니다.
🎯 개인정보 보호 및 데이터 처리에 활용해 보세요! 🚀

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다