2012-05-29 22 views
143

Java resmi belgelerine durumları:Bölme boru simgesiyle bir Java dize

dize "boo:and:foo", örneğin, bu ifadelerle aşağıdaki sonuçları verir Regex Sonucu :

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

Ve bu işe ihtiyacım yolu. Ben çalıştırırsanız Ancak bu:

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

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

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

o yazdırır:

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

kadarıyla ne beklenebilir dan hangisi:

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

neden oluyor?

+2

Olası yinelenen (benim için işe yaramadı hangi., Yerine .split("\\|") bu kullanılır) (http://stackoverflow.com/questions/3481828/how [Java bir dize bölmek nasıl] -to-split-a-string-in-java) –

cevap

321

Sen

test.split("\\|"); 

split normal ifadeyi kullanır ve regex| yılında OR operatörü temsil eden bir metakarakterdir gerekir. Sen (\ dize hazır bilgileri bir metakarakterdir da olduğundan "\\" olarak dize ile yazılmış ve ondan kaçmak için başka \ gerektirir) \ kullanarak bu karakteri kaçmak gerekir.

Ayrıca

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

kullanabilir ve Pattern.quote| temsil regex ait kaçan sürümünü oluşturmak izin verebilirsiniz. yöntemi bir argüman olarak bir düzenli ifade alır()

+14

Bu, ['split()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html #% 28java.lang bölün.String% 29) metodu regex alır ve '|' reg –

+0

için özel bir karakterdir, yığın taşması konusunda moderatör olarak ikinci tercihim sensin. Herşey gönlünce olsun. –

24

Kullanım doğru kaçış: string.split("\\|")

Veya tam olarak bu amaç için yaratılmış olan yardımcı Pattern.quote():

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

hangi rasgele giriş dizeleriyle çalışır. Kullanıcı girişinden alıntı/çıkış yapmanız gerektiğinde çok kullanışlıdır.

+3

Geçiş yapılmadığında değil, Java 8'de ise "Pattern.quote()" kullanılır. – RAnders00

1

Ayrıca apache kütüphane kullanımı ve bu yapabilirdi:

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

kullanın bu kodu: Ayrıca .split("[|]") kullanabilirsiniz

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

Bu çözüm zaten kabul edilmiş bir cevapla işaretlenmiştir. Tekrarlamaya gerek yok. – Pshemo

1

.

ait

+0

Her iki sürüm de iyi çalışıyor. Eğer biri önermezse sorun başka bir yerdedir. – Pshemo

+0

@Pshemo Ancak bu, ilginç bir lezzet katıyor, bazı ayrılmış sembollerin parantez içine konduğunda kaçması gerekmiyor. –