안녕하세요.
오늘은 자바에서 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("\\|");
그럼 오늘도 저의 작고 소중한 글을 읽어주셔서 감사합니다.

'Java > Java' 카테고리의 다른 글
자바 천단위 콤마 찍기 (addComma) (0) | 2023.01.28 |
---|---|
[java] 자바 split 정규식 문자 사용하기 (0) | 2023.01.22 |
[java] 자바 split(".") 검색하는 방법과 주의사항 알아보기 (0) | 2023.01.19 |
[java] 자바 문법 에러 'Dangling meta character '' near index 0' 해결하기 (split 에러 이슈) (0) | 2023.01.18 |
[java] 자바 문법 에러 Unmatched closing ')' 해결하기 (split 에러 처리) (1) | 2023.01.16 |