2016-03-22 24 views
-1

gibi özel karakterleri tanımlamak için regex { veya $ gibi özel bir karakterin bir dizede olup olmadığını kontrol etmek istiyorum. Regexp kullandım ama kod incelemesi sırasında indexOf() yerine regex (onun costlier'ı olarak) kullanması istendi. IndexOf() özel karakterleri tanımlamak için nasıl kullanıldığını anlamak isterim. Yalnızca sen sadece indexOf ("$") veya indexOf ("}" kullanmayı tercih ediyorum farklı özel karakterlerin bir çift bulmak için arıyorsanız

String photoRoot = "http://someurl/${TOKEN1}/${TOKEN2}"; 
Pattern p = Pattern.compile("\\$\\{(.*?)\\}"); 
        Matcher m = p.matcher(photoRoot); 
        if (m.find()) { 
         // logic to be performed 
        } 
+0

5 istiyor musunuz? – MaxG

cevap

1

Daha sonra bir indexOf (...) yöntemi vardır, ancak hepsi tüm karakterleri aynı şekilde ele alır, bu yöntemleri kullanırken herhangi bir karakterden kurtulmaya gerek yoktur.

String photoRoot = "http://someurl/${TOKEN1}/${TOKEN2}"; 
String startDelimiter = "${"; 
char endDelimiter = '}'; 
int start = -1, end = -1; 
while (true) { 
    start = photoRoot.indexOf(startDelimiter, end); 
    end = photoRoot.indexOf(endDelimiter, start + startDelimiter.length()); 
    if (start != -1 && end != -1) { 
     System.out.println(photoRoot.substring(start + startDelimiter.length(), end)); 
    } else { 
     break; 
    } 
} 
0

, cevap olacak

var found = photoRoot.indexOf("$") >=0 ||| photoRoot.indexOf("?") >=0; 
0

Bu bilgiyi orada ters iken tahmin etmek her zaman zordur: Burada

Eğer indexOf(...) yöntemlerden bazılarını kullanarak iki belirteçleri almak nasıl olduğunu. Kod, özel karakterleri aramaz, modelini arar ve indexOf orada size yardımcı olmaz.

Eğer

('özel karakterler belirlenmesi' aksine) desen ${...} bulmak gerekiyorsa Titus'un cevabı modeli eşleşmesi kaçınmak için iyiyse (gözden geçiren düşünmek göründüğü gibi) sadece aramak gerekir art arda indexOf (on_special_char) uygulayabilirsiniz özel karakterler kümesi herhangi, ama aynı zamanda

for(int i = 0; i < photoRoot.length(); ++i){ 
    if("${}".indexOf(photoRoot.charAt(i)) >= 0){ 
     // one of the special characters is at pos i 
    } 
} 

değil birden indexOf hedef dize çağırmakta ve (yukarıda) arasındaki performans "bile kırmak" yerinden emin yapabilirim Özelliği içeren (kısa) dizede indexOf ile hedef üzerinde yineleme olduğunu. Ancak, özel bir dizi için dinamik adaptasyonun sürdürülmesi ve buna izin vermesi daha kolay olabilir. Tabii

, basit

photoRoot.matches(".*" + Pattern.quote(specials) + ".*"); 

dinamik olarak da uyarlanabilir. Bir dizede bir karakterin bulunup bulunmadığını öğrenmek için indexOf'un nasıl kullanıldığını veya çalışma zamanı karmaşıklığı hakkında soru sormak için