2016-03-22 7 views
-1

Ich möchte überprüfen, ob ein Sonderzeichen wie { oder $ in einer Zeichenfolge vorhanden ist oder nicht. Ich habe regexp verwendet, aber während der Code-Überprüfung wurde ich gebeten, indexOf() anstelle von regex (wie es teurer ist) zu verwenden. Ich würde gerne verstehen, wie indexOf() verwendet wird, um Sonderzeichen zu identifizieren. (I bekannt, dass dies zu indizieren String erfolgen)

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

Fragen Sie, wie indexOf verwendet wird, um herauszufinden, ob ein Zeichen in einer Zeichenfolge vorhanden ist oder ob Sie nach der Komplexität der Laufzeit fragen? – MaxG

Antwort

1

Es gibt mehr als eine indexOf (...) Methoden, aber alle behandeln alle Zeichen gleich, es gibt keine Notwendigkeit, irgendwelche Zeichen zu entkommen, während diese Methoden verwendet werden.

Hier ist, wie man die beiden Token erhalten können durch einige der indexOf(...) Methoden:

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

wenn Sie nur schauen, um ein paar verschiedenen Sonderzeichen finden Sie nur indexOf verwenden würden („$“) oder indexOf („}“). Sie müssen jedes Sonderzeichen angeben, das Sie getrennt finden möchten.

Es gibt keine Möglichkeit, obwohl es den Index jedes Sonderzeichen in einer Erklärung finden haben: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)

0

Wenn Sie wie in Ihrer Frage für 2 Zeichen müssen überprüfen, wird die Antwort

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

Es ist immer schwer zu erraten, während es Informationen widerspricht. Der Code sucht nicht nach Sonderzeichen, es sucht nach einem Muster - und indexOf wird Ihnen dort nicht helfen.

Titus' Antwort ist gut für die Vermeidung von Pattern-Matching, wenn Sie das Muster finden, müssen ${...} (im Gegensatz zu ‚identifizieren Sonderzeichen‘)

Wenn (wie der Rezensent zu denken scheint) Sie müssen nur suchen jede aus einer Reihe von Sonderzeichen Sie indexOf (on_special_char) wiederholt anwenden können, aber Sie können auch tun

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

nicht sicher, wo die Leistung „Break-even“ zwischen mehreren indexOf auf der Zielzeichenfolge aufrufen und die (oben) Iteration auf dem Ziel mit indexOf auf der (kurzen) Zeichenfolge, die die Specials enthält, ist. Es ist jedoch einfacher zu warten und erlaubt eine dynamische Anpassung an die Specials.

Natürlich ist die einfache

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

ist auch dynamisch anpassungsfähig.