2012-08-13 30 views
7

Bazı jdk kodlarına bakıyordum. Bu karakterleri buldum. Birisi bana bunun ne anlama geldiğini açıklayabilir. Ben yönteminde olduğu gibi neler olduğunu anlamaya başardı yukarıdaki kod örneğinde itibaren Java'da bu özel karakterler ne anlama geliyor?

public static String quote(String s) { 
    int slashEIndex = s.indexOf("\\E");  // What does this mean. Is this a special char in java. if so what does this do. 
    if (slashEIndex == -1) 
     return "\\Q" + s + "\\E";   

    StringBuilder sb = new StringBuilder(s.length() * 2); 
    sb.append("\\Q"); 
    slashEIndex = 0; 
    int current = 0; 
    while ((slashEIndex = s.indexOf("\\E", current)) != -1) { 
     sb.append(s.substring(current, slashEIndex)); 
     current = slashEIndex + 2; 
     sb.append("\\E\\\\E\\Q"); 
    } 
    sb.append(s.substring(current, s.length())); 
    sb.append("\\E"); 
    return sb.toString(); 
} 

\ tekrarlarını bulur ve E ve \ Q \ dönüştürür. Birisi bunun neden böyle olduğunu açıklayabilir. Bu yöntemle ilgili daha fazla içerik için

, ben

En ait ... jdk 1.6

+0

[Java kaynaklardan düz kaldırdı] edilecek (http://www.docjar.com/html/api/java: Daha fazla ayrıntı için

bu bağlantıya bakın /util/regex/Pattern.java.html) ("Pattern.java", satır 1276..1293). – dasblinkenlight

+0

Evet, jdk kaynakları Pattern.java'dan geliyor – JourneyMan

cevap

2

Eh, \Q ve \E Java regular expressions özel anlama sahip den Pattern.quote() yönteminin içine bakıyordu Bu yöntem sadece teklif işaretleyicileri \Q ve \E'dan alıntı yapılmasının zor kenar durumu üzerinde çalışıyor.

4

Java regex motoru, \Q ve \E arasındaki tüm meta-karakterlerin özel yorumlanmasını engeller. '[', 'n', 'a', 'm', 'e' ve ']' - \Q[name]\E altı karakter eşleşir Örneğin, [name], tek bir karakterin ('n', 'a', 'm' veya 'e') eşleşir. Daha fazla ayrıntı için regex tutorial'un Özel Karakterleri bölümüne bakın. Yöntem, muhtemelen harici olarak (örneğin, bir kullanıcı tarafından girilen) temin edilen bir diziden düzenli bir ifade yapar. Dize meta-karakterler içerebileceğinden, yöntem tüm dizeyi \Q ve \E'da içerir. dize zaten \E içeriyorsa, yöntem, Pattern.quote() yapar tam olarak ne ..