2011-06-08 16 views
5

kullanarak bir dize i sonucu olmalıdır Bölme Kelime ayraçları

a > b and c < d or d > e and f > g 

aşağıdaki gibi bir dize var belirteci ile birlikte de delims almak için kullanılır. i

olarak StringTokenizer kullanarak çalıştı

[i ifade değerlendirmek için gereksinim]

new StringTokenizer(x, "\\sand\\s|\\sor\\s", true); 

ancak istenilen sonucu elde edemiyorum. i

Scanner sc = new Scanner(x); 
     sc.useDelimiter("and | or"); 

bu bölünmüş yapabiliyor ama ayraçları iade doesnt tarayıcı kullanarak çalıştı.

lütfen öneriniz. Yukarıdaki gibi bir, b, c verdim ama boşluklar ile a, b, c yerine küfürler olsun. Güncelleştirilmiş örnek.

+0

Açıklamanız kullanarak ima - (sadece hakkını tek insert ikinci bakışta son derece şüphe onun metinsel açıklamasından ama oh iyi olan) Sadece ne istediğini yapacağım varsayarak OT gelen regex kopyalanan Dizgiler "ve" & "veya" veya "sınırlayıcı olarak, ancak çıktınız" "bir sınırlayıcı olarak" "ima eder. Lütfen açıkla. – djg

+0

doh! string olarak kötü bir örnek vereyim .. başka bir örnek verelim – jch

+0

http://stackoverflow.com/questions/3777546/how-can-i-split-a-string-in-java-and-retain-the-delimiters – JustinKSU

cevap

2
String delim = " "; 
String[] splitstrings = yourString.split(delim); 
for (int i = 0; i < splitstrings.length(); i++) { 
    splitstrings += delim; 
} 
+0

OP, delillerin de iade edilmesini istiyor. 'split' geri dönmeyecek. – CoolBeans

+0

i ddint açık bir şekilde açıklayacağım .. şimdi örneği güncelledik. – jch

+0

üzgünüm, ama doğru düşünmüyorum .. – jch

2

Ne gerçekten istediğiniz boşlukların tüm farklı permütasyon içine ve sözdizimi büyüdükçe çalışacak zaman JFlex gibi bir araçtır. Uzun vadede zamandan tasarruf edersiniz.

3

Bu, "ve" veya "veya" sözcüklerini çevreleyen herhangi bir sayıda boşlukla bölünür.

String test = "2 < 3 and 3 > 2 or 4 < 6 and 7 < 8"; 

    String [] splitString = test.split("\\s*[and|or]+\\s*"); 
    for(int i = 0; i < splitString.length ; i ++){ 
     System.out.println(splitString[i]); 
    } 

çıkış

2 < 3 
3 > 2 
4 < 6 
7 < 8 
+0

sınırlayıcı nasıl elde edilir? – jch

0

A StringTokenizer yanı sıra kadarıyla farkındayım olarak ayırıcı kullanılan dönen yetenekli tek java standart sınıftır.

String input = "a > b and c < d or d > e and f > g"; 
    StringTokenizer tokenizer = new StringTokenizer(input, "\\sand\\s|\\sor\\s", true); 
    while (tokenizer.hasMoreTokens()) { 
     System.out.println(tokenizer.nextToken()); 
    }