2017-07-08 74 views
5

Bir dizeyi birden çok dizeye ayırmaya çalışıyorum, ancak bir dize kullanarak basit bir regex deseni kullanmak yerine, bir regex desenini kullanmaya çalışıyorum. Belirli karakterleri algılarsa farklı dizelere bağlar, ancak karakterler farklıdır. Dizeyi farklı dizelere bölmek yerine, her bir karaktere söz konusu dizgede her birini veriyor. Bir yolu varsaFarklı Yakalama Gruplarıyla Bir Regex Kullanarak Birden Çok Dizeye Bir Dize Bölme

:if[input=right || input=Right]: 

Sadece merak ediyorum: Yukarıdaki satırı kullanma

String[] splitstr = line.split("([&]{2})?([|]{2})?(!=)?"); 

, bir değişken bir örnek olarak, bir dosyadan bu satırı koyuyorum, line çağrıda

":if[input=right", "input=Right]:" 

içine bu bölünmeyi yapmak Ve böyle bir çizgide koyarsanız:

:if[input=right || input=Right && input != null]: 

Yani

":if[input=right", "input=Right", "input != null]:" 
Ben || sembolü için String#split(regex) kullanıyordum

böler olduğunu ve gayet güzel çalıştı ama şimdi || veya && veya != ve istediğim o yerde bunu bölmek istiyorum benim Kod verimli ve temiz ve okunması kolay.

cevap

2

java sınıfı Örnek dizginizi ilgilendiğiniz parçalara böler. Kod bölünecek orijinal dizge '||' ve küresel olarak '& &' delimetreleri. Eğer birden fazla '||' varsa veya orjinal dizinizdeki '& &' operatörü, her parça bölünecektir. Unutulmaması gereken

Bir şey (\) özel karakterler kaçmak için ihtiyaçtır. Java'da da kaçıştan kaçmak zorundasınız, böylece dizinizde bir literal olması için 2 ters eğik çizgi gerekir.

İşte regEx kodunu test etmek harika bir site var ... Regular Expressions 101

public class splitStrRegex { 

    public static void main(String[] args) { 

     String myStr = ":if[input=right || input=Right && input != null]:"; 
     String[] myStrings = myStr.split("\\|\\||&&"); 
     for(int i = 0; i < myStrings.length; i++) { 
      System.out.println(myStrings[i].trim()); 
     } 
    } 
} 

Çıktı:

:if[input=right 
input=Right 
input != null]: 
+0

Ben boru sembolü için bazı özel kullanım olduğunu düşünüyordum Aman tanrım Boruyu kaçmamı söylediğine sevindim! Teşekkürler! –

+0

Sevindim @AlexCouch yardımcı olabilir. En sevdiğin cevaplar için oy vermeyi unutma, büyük soru için de teşekkürler! – MJFoster

0

Bu çok ilginç bir soru.

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 & 55!=6"; 
     String[] parts = string.split("[&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

ÇIKIŞ: Java String.split() Regex Ayrıca o kadar kolay gibi kontrol etmek: gibi sitede bunun için daha fazla cevaplar vardır

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 55 
Part: 
Part: 6 

Ama sorun sembolü "& &" ile, örneğin, aşağıdakiler için:

ÇIKIŞ:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 && 55 
Part: 
Part: 6 

Ben mesela, başka yorumlanmasında & & anlaşılması gerektiğini tahmin edebilirsiniz:

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 && 55!=6"; 
     String[] parts = string.split("[&^&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

ÇIKIŞ: Aşağıda

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 
Part: 55 
Part: 
Part: 6