java split에서 "|" 로 문자 자르기 (feat. 2차원, 도로명주소) 본문
java split에서 "|" 로 문자 자르기 (feat. 2차원, 도로명주소)
- 2023. 2. 20. 10:41
반응형
자바에서 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' 카테고리의 다른 글
git에 기존 프로젝트 최초 등록 [eclipse, github] (0) | 2023.07.20 |
---|---|
[Springboot] 환경별 properties 관리방법 (0) | 2023.03.03 |
spring boot 설정시 바뀐 부분 정리 (IFASS) (0) | 2022.11.30 |
Ibatis에서 mybatis로 일괄 변환 (100% 아님) (0) | 2022.11.18 |
svn 설치 [eclipse] [STS] 유사 (0) | 2022.11.15 |
RECENT COMMENT