자바 내장함수 split으로 문자열을 자르다 보면 "|" 문자를 기준으로 자를경우가 생기기도 한다.

"/" 또는 "," 등을 많이 사용하지만 for문 깊숙히 들어가다보면 또는 문자열에 많은 특수문자들이 포함되어 기준이 애매모호해질경우 "|"를 사용하기도 한다.

하지만 "|"로 자를경우 다른 문자로 자를경우와 결과물은 달라진다.

 

ex)

String str = "aaa|bbb|ccc";

String[] result = str.split("|");

 

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

}

 

=>

0=
1= a
2= a
3= a
4= |
5= b
6= b
7= b
8= |
9= c
10= c
11= c

 

결과는 엉뚱해진다.

이것땜에 한참을 구글링을 해본결과 "|"는 boolean과 같은 결과를 리턴한단다.

OR 조건에 걸리는 것이다.

 

해결방법은 "\\|" 로 자르는것이다.

 

ex)

String str = "aaa|bbb|ccc";

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

 

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

}

 

ex2)

String str = "aaa||bbb||ccc";

String[] result = str.split(\\|\\|);

 

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

}

 

=>

0= aaa
1= bbb
2= ccc

 

어찌보면 당연한 결과일지도 모르는데..

나만 몰랐던 것일까..

 

  1. 1 2016.04.27 14:14

    감사합니다

  2. 사랑은 2016.09.05 10:27

    저도 몰랐습니다..ㅠㅠ boolean 이라니... 도움 감사합니다...

  3. 오... 2016.09.24 22:51

    좋은정보 감사합니다 ~
    내용 중간에 OR조건에 걸린다는게 무슨 뜻인지좀 알 수 있을까요?

    • 지나가는이 2018.01.03 06:48

      split function이 인자값으로 regex를 받기 때문입니다.
      regex는 |를 파이프가 아닌 or연산자로 인식 합니다.

      regex가 싫으시면 StringTokenizer를 사용하세요.
      https://www.mkyong.com/java/java-how-to-split-a-string/

  4. Favicon of https://firepunch.tistory.com BlogIcon firepunch 2017.04.20 11:16 신고

    감사합니다!!

  5. 2017.08.02 10:07

    감사합니다. 이런 결과가 나오다니. 한참 해매였는데 도움이 되네요.~~!!

  6. hanzel 2017.08.16 13:06

    저도...계속 왜 오류나지...이러다가 검색해서 알아갑니다.

    감사합니다!!

+ Recent posts