본문 바로가기
Language/Java

자바 Pattern을 이용해 오라클 IN 처럼 사용방법

by wakestand 2020. 12. 4.
반응형

자바에서 IF를 사용해 특정 값일 경우에만 체크하려는 경우

위 배열에서 if(값 == "zebra") {} 로 시작하지만

이게 원하는 값이 늘어나면 늘어날수록

if(값 == "zebra" || 값 == "dog" ...) {}

이런 식으로 계속 늘어나기 때문에

3개만 넘어가도 볼게 못 된다

 

이럴 때 오라클의 IN 처럼

값 IN ('1', '2', '3');

이런 식으로 처리가 가능하면 참 좋을텐데

 

자바에는 Pattern이 있으므로 이걸 사용해주면

오라클의 IN처럼 사용이 가능해진다

 

Pattern은

Pattern 패턴명 = Pattern.compile("값|값");

이렇게 정의하는데

값과 값은 |를 넣어 구분하게 된다

 

이후 비교 시에는

패턴명.matcher(값).find()

를 사용하면 비교하려는 값에

패턴 값이 있냐 없냐에 따라서 true, false를 반환하게 된다

 

위 예제에서는 

String 배열에는 zeebra, dog, cat이 있고

패턴에 dog, cat가 들어있으니

패턴에 해당하는 dog, cat이 출력된다

 

다음으로는 패턴값을

내가 고정으로 정하는 게 아니라

어디서 받아오는 경우인데

 

String 배열이나 list 등에서 값을 가져와서

Pattern을 만들어야 하는 경우에는

 for문을 한번 돌려주면 되는데

 

마지막 전까지는 |를 붙여가며 String을 연장하다가

맨 마지막에는 붙이지 말고

 

완성시킨 String을 Pattern.compile() 안에 넣어주면

하드코딩으로 설정하지 않아도 관리가 가능하다

 

마지막으로 예제에 사용한 코드는 아래와 같다

 

// 패턴 예제

	public static void main(String[] args) {
		Pattern p = Pattern.compile("dog|cat"); // |를 붙이면서 Pattern 연장
		String[] array = {"zeebra", "dog", "cat"};
		
		System.out.println(p.matcher(array[0]).find());
		
		for(int i = 0; i<array.length; i++) {
			if(p.matcher(array[i]).find()) { // Pattern에 해당하는 값만 찾기
				System.out.println(array[i]);
			}
		}
	}

 

// 패턴 예제(Array로 받을 경우)
	public static void main(String[] args) {
		String[] mainArray = {"cat", "zeebra", "dog", "horse"}; // 전체 Array
		String[] array = {"zeebra", "dog"}; // Pattern에 사용될 Array
		String patternResult = "";
		
		for(int i = 0; i<array.length; i++) {
			if(i == array.length - 1) { // 마지막에는 |를 붙일 필요가 없음
				patternResult =  patternResult + array[i];
			} else { // | 붙여가며 연장
				patternResult =  patternResult + array[i] + "|";
			}        	
		}
		
		Pattern p = Pattern.compile(patternResult); // 연장한 String을 Pattern화
		
		for(int i = 0; i<mainArray.length; i++) {
			if(p.matcher(mainArray[i]).find()) { // Pattern에 해당하는 값만 찾기
				System.out.println(mainArray[i]); // 출력
			}
		}
	}
반응형

댓글