꾸준한 개발일기

java:: 지번주소에서 리 문자열 추출하기(split, contailns) 본문

Programing/Java

java:: 지번주소에서 리 문자열 추출하기(split, contailns)

꾸개일 2022. 3. 31. 16:20
반응형

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 주소 데이터를 가공해서 리 컬럼을 생성하였다.

 

 

 

반응형
Comments