본문 바로가기
Java/Java

[java] 자바 split 파이프라인 "|" 검색하기

by 산코디 2023. 1. 20.

 

 

 

안녕하세요.

오늘은 자바에서 split 처리를 하다 보면 특수 문자를 구분자로 사용하여 문자를 잘라야 하는 경우가 있습니다. 그중에서 이슈가 있는 파이프라인 "|"에 대해 정리하려고 합니다. 파이프라인을 넣고 split을 하게 되면 원하던 결괏값과는 다른 결괏값이 나오게 됩니다. 그럼 예제 소스 코드를 보면서 알아보도록 하겠습니다.

 


1. split("|") 처리

package com.demo.system;

import java.util.Arrays;
import java.util.stream.Collectors;

public class TestMain {

    public static void main(String[] args) {
    	
        splitTest("abcsefg", "|");
    }
    
    /**
     * split을 이용한 정규식 문자 테스트 method
     */
    public static void splitTest (String originData, String regex) {
		
        System.out.println("---------------------------------------------");
        System.out.println("* 원본 데이터 : " + originData);
        System.out.println("* 정규식 문자 : " + regex);
        System.out.println("---------------------------------------------");
		
        String regexData = Arrays.stream(originData.split("")).collect(Collectors.joining(regex));
	   
    	System.out.println("* 원본 + 정규식 데이터 : " + regexData);
    	System.out.println("---------------------------------------------");
	    
    	String [] arr = regexData.split(regex);
	
    	int arrLength = arr.length;
	
    	System.out.println("* split size : " + arrLength);
    	System.out.println("---------------------------------------------");
		
    	for (int i = 0; i < arrLength; i++) {
    		System.out.println(arr[i]);
    	}
    }
}

split을 이용하여 테스트할 수 있도록 메서드를 만들어 줬습니다.

  - 인자값 1 : split 대상 문자열

  - 인자값 2 : split 구분값 (위의 메서드에서는 인자값1과 join 처리를 하고 나서 split 처리를 하기 위한 용도)

 

테스트로는 인자값1에 "abcdefg", 인자값 2에 "|" 값을 넣고 메서드를 호출하였습니다.

  - "a|b|c|d|e|f|g"

 

결과는 어떻게 나오는지 실행 결과를 확인해 보겠습니다.

 


실행 결과

 

에러가 발생하진 않고 결과가 나오긴 했는데 생각했던 결괏값은 아닌 것 같습니다.

구분자를 "|"로 주고 실행했기 때문에 원하던 결과값은 "a", "b", "c"... 이런 식으로 나와야 하는데 "|"까지 같이 split이 된 현상입니다. 마치 ""(공백) 값을 주고 split 한 결과와 동일하게 나왔네요.
위와 같이 "|"를 구분자로 split이 필요한 상황에는 정규식 문자가 아닌 일반 문자로 인식할 수 있도록 처리를 해줘야 합니다.

일반 문자로 사용하고자 하는 "|" 앞에 "\\"를 추가해 주면 됩니다. 수정된 소스 코드를 통해 알아보겠습니다.

 

반응형

"\\"를 추가하여 일반 문자로 split 처리
String [] arr = regexData.split("\\" + regex);

split 하고자 하는 구분자 앞에 "\\"를 추가해 줬습니다. 


실행 결과

 

정규식 문자 "|"를 일반 문자로 변경해 주고 정상적으로 출력된 화면입니다.

"|"를 기준으로 split을 사용할 땐 "\\|" 이렇게 넣고 split을 해주면 됩니다.

 


마무리 

이슈 원인
split에서는 "|"를 예약된 정규식 문자로 인식을 하기 때문에 결과값이 다르게 나오며, "|"를 기준으로 split 처리가 필요한 경우는 일반 문자로 처리할 수 있게 변경이 필요
해결 방안
split("\\|");

 

 

그럼 오늘도 저의 작고 소중한 글을 읽어주셔서 감사합니다.

 

 

 


 

반응형