본문 바로가기
Java/Java

[java] 자바 문법 에러 Unclosed character class near index 0 해결하기 (split 에러 처리)

by 산코디 2023. 1. 14.

 

 

 

안녕하세요.

오늘은 자바의 문법 에러에서 'Unclosed character class near index 0' 에러에 대해 알아보려고 합니다. 해당 에러는 자바의 split을 사용할 때 발생하는 에러입니다. 정규식 문자 "["를 넣고 split을 실행했을 경우 위의 에러가 발생합니다. 그럼 에러가 난 예제 소스 코드와 해결 방법을 알아보도록 하겠습니다.

 


1. 'Unclosed character class near index 0'

 

에러 내용

 

에러 내용의 마지막 부분에 "["에서 에러가 발생했다고 표시를 해주고 있습니다. 에러 원인은 내용에서 알 수 있듯이 정규식 문자 "["를 사용할 때에는 "]" 닫아주는 정규식 문자를 같이 사용해야 하는데 그렇지 않고 "[" 문자만 넣어서 발생한 듯 합니다.

그럼 에러가 발생한 예제 소스 코드를 보도록 하겠습니다.

 


예제 소스 코드
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"

 

위의 합쳐진 문자열을 기준으로 split("[")을 실행한 결과 위와 같이 에러가 발생하였습니다.

위와 같이 "[" 기준으로 split을 실행해야 하는데 에러가 발생을 한다면 정규식 문자를 일반 문자로 인식할 수 있도록 처리를 해주면 됩니다.

String [] arr = regexData.split("\\" + regex);

 

반응형

 

 


"\\" 기준으로 정상 split 처리된 결과

 

실행 결과는 정상적으로 나왔습니다!

 


마무리

에러 원인
정규식 문자 "["를 넣고 split을 실행하게 되면 정규식 문자로 인식하기 때문에 "]" 닫아주는 문자가 같이 붙어야 함
해결 방안
split("\\[");

 

 

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

 

 

 


 

반응형