Java Dizesini bölme (“|”) kullanarak boru simgesiyle bölme


195

Java resmi belgeleri şunları belirtir:

"boo:and:foo"Örneğin dize , bu ifadelerle Normal İfade Sonucu ile aşağıdaki sonuçları verir:

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

Çalışmak için buna ihtiyacım var. Ancak, ben bunu çalıştırın:

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

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

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

yazdırır:

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

Beklediğimden çok uzak:

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

Bu neden oluyor?


Yanıtlar:


424

İhtiyacın var

test.split("\\|");

splitnormal ifade kullanır ve düzenli ifade | temsil eden bir meta olan ORoperatör. Kullanarak bu karakterden kaçmanız gerekir \( "\\"çünkü \String dizgisinde aynı zamanda bir metakarakter olduğu için ve bu diziden \kaçmak için başka bir karakter gerektirir ).

Ayrıca kullanabilirsiniz

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

ve Pattern.quoteifade eden regex'in kaçan sürümünü oluşturalım |.


17
Bu split()yöntem regex alır ve |reg ex için özel bir karakter
Jigar Joshi

1
yığın taşması için bir moderatör olarak benim ikinci seçimimsin. Herşey gönlünce olsun.
Däñish Shärmà

33

Uygun kaçış kullanın: string.split("\\|")

Veya Java 5+ sürümlerinde, Pattern.quote()tam olarak bu amaçla oluşturulan yardımcıyı kullanın :

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

bu da gelişigüzel girdi dizeleriyle çalışır. Kullanıcı girişinden alıntı yapmanız / kaçmanız gerektiğinde çok kullanışlıdır.


3
Geçiş yapıldığında emin değilim, ama Java 8'de biri kullanacaktı Pattern.quote().
RAnders00

4

Bu kodu kullanın:

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

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

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

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

3

Apache kitaplığını da kullanabilir ve şunları yapabilirsiniz:

StringUtils.split(test, "|");

1

Ayrıca kullanabilirsiniz .split("[|]").

(Bunu .split("\\|")benim için çalışmadı, yerine kullandım .)


Her iki sürüm de iyi çalışmalıdır. Eğer biri bunu yapmazsa, sorunun başka bir yerde olduğunu düşündürür.
Pshemo

@Pshemo Ancak bu ilginç bir lezzet katar, parantez içine konulursa bazı ayrılmış sembollerin kaçması gerekmez.
Pax Vobiscum

0
test.split("\\|",999);

Bir sınır veya maks belirtme, "boo ||| a" veya "|| boo |" gibi örnekler için doğru olacaktır. veya "|||"

Ancak test.split("\\|");aynı örnekler için farklı uzunluk dizeleri dizileri döndürür.

referans kullanın: bağlantı


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.