꾸준한 개발일기
java:: 지번주소에서 리 문자열 추출하기(split, contailns) 본문
API를 통해 데이터를 받아오는데 문제가 발생했다.
주소 중 "리"에 대한 데이터를 제공하지 않는 것이다.
서비스에서 검색 조건에 리가 있는데 말이다.
시도나 읍면동은 카카오에서 제공하는 데이터를 조인하여 가져올 수 있지만 리는 따로 제공하지 않고있다.
그래서 전체 지번 주소에서 리만 추출하는 기능을 구현해보았다.
1. 자바 문자열 나누기(split)
문자열.split(String regex);
regex: 문자열로 regex로 나누어진 문자열은 배열에 저장된다.
example에선 " "(공백)을 regex로 사용했다.
String fulladdr = "충청북도 청주시 청원구 오창읍 화산리(華山) 어쩌고";
String [] split_fulladdr = fulladdr.split(" ");
System.out.println(split_fulladdr[0]);
System.out.println(split_fulladdr[1]);
System.out.println(split_fulladdr[2]);
System.out.println(split_fulladdr[3]);
System.out.println(split_fulladdr[4]);
System.out.println(split_fulladdr[5]);
결과:
충청북도
청주시
청원구
오창읍
화산리(華山)
어쩌고
split_fulladdr 배열에 데이터를 담았다.
이제 원하는 곳에 꺼내 사용하면 된다.
2. 자바 문자열이 포함되는지 확인하기(contains)
문자열1.contains("문자열2");
문자열1에 문자열2가 포함되는지 확인할 수 있다.
String fulladdr = "충청북도 청주시 청원구 오창읍 화산리(華山) 어쩌고";
String [] split_fulladdr = fulladdr.split(" ");
if(split_fulladdr[3].contains("리")){
System.out.println("리가 포함되어 있습니다.");
} else {
System.out.println("리가 포함되어 있지 않습니다.");
}
결과:
리가 포함되어 있습니다.
이제 리가 포함되는지 여부를 확인할 줄 알게되었다.
그러면 주소마다 규칙을 확인하고 조건을 설정한다.
3. 주소 조건 설정하기
1) "충청북도 단양군 대강면 덕촌리 어쩌고"
split_fulladdr[2]에 면이 있어야 하고 split_fulladdr[3]에 리가 포함되어야한다.
split_fulladdr[2].contains("면") && split_fulladdr[3].contains("리")
2) "충청북도 단양군 매포읍 평동리 어쩌고"
split_fulladdr[2]에 읍이 있어야 하고 split_fulladdr[3]에 리가 포함되어야한다.
split_fulladdr[2].contains("면") && split_fulladdr[3].contains("리")
3) "충청북도 청주시 상당구 문의면 신대리 어쩌고"
split_fulladdr[2]에 구가 있으면 split_fulladdr[4]에 리가 포함되어야한다.
split_fulladdr[2].contains("구") && split_fulladdr[4].contains("리")
이렇게 조건 세 가지를 설정하고 나머지 경우는 리가 포함되어 있지 않으니 else로 뺀다.
전체코드:
public class AddrTest {
public static void main(String[] args) {
String fulladdr = "충청북도 청주시 청원구 오창읍 화산리(華山) 어쩌고 저쩌고";
String [] split_fulladdr = fulladdr.split(" ");
if(split_fulladdr[2].contains("읍") && split_fulladdr[3].contains("리")) {
System.out.println(split_fulladdr[3]);
} else if(split_fulladdr[2].contains("면") && split_fulladdr[3].contains("리")){
System.out.println(split_fulladdr[3]);
} else if(split_fulladdr[2].contains("구") && split_fulladdr[4].contains("리")){
System.out.println(split_fulladdr[4]);
} else {
System.out.println("리 없음");
}
}
}
이를 응용해서 API 주소 데이터를 가공해서 리 컬럼을 생성하였다.
'Programing > Java' 카테고리의 다른 글
Java:: 한 줄에 나열된 데이터를 split으로 분리하여 csv 파일 쓰기 (0) | 2021.11.11 |
---|