2012-05-29 2 views
143

자바 공식 문서 상태 :분할 파이프 기호로 자바 문자열

문자열 "boo:and:foo"는, 예를 들어, 이러한 식으로 다음과 같은 결과를 얻을 수 정규식 결과 :

{ "boo", "and", "foo" }" 

그게 내가 필요로하는 방식입니다. 내가 실행하는 경우 그러나, 이것은 :

public static void main(String[] args){ 
     String test = "A|B|C||D"; 

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

     for(String s : result){ 
      System.out.println(">"+s+"<"); 
     } 
    } 

그것은 인쇄 :

>< 
>A< 
>|< 
>B< 
>|< 
>C< 
>|< 
>|< 
>D< 

지금까지 내가 무엇을 기대에서 어느 :

>A< 
>B< 
>C< 
>< 
>D< 

왜 이런 일이?

+2

가능한 중복 (나는 나를 위해 작동하지 않았다. 대신 .split("\\|")의 사용) (http://stackoverflow.com/questions/3481828/how [자바에서 문자열을 분할하는 방법] -to-split-a-string-in-java) –

답변

321

당신은

test.split("\\|"); 

split는 정규 표현식을 사용하고 정규식|OR 연산자를 나타내는 메타 문자가 필요합니다. \을 사용하여 해당 문자를 이스케이프해야합니다 (으로 문자열로 작성) \은 문자열 리터럴의 메타 문자이기도하고 다른 문자로는 \이 필요합니다.

또한

test.split(Pattern.quote("|")); 

사용 Pattern.quote|를 나타내는 정규식의 탈출 버전을 만들 수 있습니다. 방법은 인수로 정규 표현식을한다()

+14

그것은 ['split()']] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html)입니다. # split % 28java.lang.문자열 % 29) 메서드는 regex를 사용하고'| '는 reg에 대한 특수 문자입니다. –

+0

스택 오버플로에서 중재자로서의 두 번째 선택 항목입니다. 모두 제일 좋다. –

24

를 사용하여 적절한 이스케이프 : string.split("\\|")

또는 바로이 목적을 위해 만들어졌습니다 도우미 Pattern.quote() :

string.split(Pattern.quote("|")) 

하는 임의의 입력 문자열에서 작동합니다. 사용자 입력을 인용/이스케이프해야하는 경우 매우 유용합니다.

+3

전환 할 때 shure가 아니지만 Java 8에서는'Pattern.quote()'를 사용합니다. – RAnders00

1

또한 아파치 라이브러리를 사용하여이 작업을 수행 할 수 있습니다 :

StringUtils.split(test, "|"); 
4

사용이 코드를 : 또한 .split("[|]")을 사용할 수 있습니다

public static void main(String[] args) { 
    String test = "A|B|C||D"; 

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

    for (String s : result) { 
     System.out.println(">" + s + "<"); 
    } 
} 
+0

이 솔루션은 허용 된 대답으로 이미 지적되었습니다. 그것을 반복 할 필요가 없습니다. – Pshemo

1

.

+0

두 버전 모두 정상적으로 작동합니다. 그렇지 않으면 문제는 다른 곳에서 발생한다고 제안합니다. – Pshemo

+0

@Pshemo 그러나 이것은 괄호 안에 넣으면 일부 예약 기호를 이스케이프 할 필요가 없다는 흥미로운 향을 추가합니다. –