java split에서 "|" 로 문자 자르기 (feat. 2차원, 도로명주소) 본문

프로그램/JAVA

java split에서 "|" 로 문자 자르기 (feat. 2차원, 도로명주소)

반응형

자바에서 split을 많이 사용하는데 

이중에서 특수문자들 중에서 이상하게 처리가 되는 게 있는 데 그중 하나가

바로 이 문자 "|" 이다.

 

이것은 split 안에서 사용하면 OR처럼 처리가 되어서 전혀다른 결과를 초래한다.

따라서 이것을 사용할 경우에는 "\\|" 로 특수문자로 인식되도록 해줘야 한다.

 

String str = "aaa|bbb|ccc";
String[] result = str.split("\\|");

for(int i=0; i < result.length; i++) {
	System.out.println(i + "=" + result[i]);
}

 

또한 여러행으로 되어 있는 데이터인 경우에 개행과 특수문자를 이용하여 2차원 배열로 

만들경우에 아래와 같이 만들면 된다.

String data = new String(test);

String rows[] = data.split("\n");
String[][] matrix = new String[rows.length][];

int r = 0;
for (String row : rows) {
    matrix[r++] = row.split("\\|");
}

 

또 마지막에 특수문자만 들어가 있는 경우에도 주의할 부분이 있다.

예를 들어서  "20230214|0|31|||" 마지막에 특수문자만 있고 값이 없는 경우에는 

split에서 잘라낼때 데이터를 넣지 않는다. 왜인지는 자바 사이트를 뒤져봐야하나 경험상 빠지는 걸 확인했다.

그래서 어쩔 수 없이 마지막에  "|Z" 로 임시 문자를 추가해주면 마지막에 문자가 있는 것으로 인식하여 

위에 마지막 값이 없더라도 개수 만큼 잘라서 배열로 담는다. 

 

이러한 경우가 도로명주소 매일 연계를 할때 이러한 문제가 있어서 정리하였다.

try ( BufferedReader cbr = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile),"EUC-KR"))) {
                
    while ((line = cbr.readLine()) != null) {
        if(!"No Data".equalsIgnoreCase(line)) {
            count++;
            lineSf.append(line).append("|Z").append("\n");
        }
    }

    cbr.close();
    totString = lineSf.toString();
}

혹시 많은 도움이 되길 바라면 마친다.

 

반응형

프로그램/JAVA Related Articles

MORE

Comments