2016-04-04 14 views
0

Ich arbeite an einer Java-Methode, die zwischen absoluten und relativen URLs unterscheidet, so wie eine Browser-Adressleiste und nicht wie ein strenger URL-Parser. Das heißt, ich möchte, dass eine URL als absolut erkannt wird, wenn sie mit einem Host beginnt, ob das Schema vorhanden ist oder nicht. Auf diese Weise erkennt es schemelastige URLs (wie //example.com) und URLs, bei denen das Schema vollständig weggelassen wurde (wie example.com, wikipedia.org, lots.and-lots.of.domains.com.ng). Das Verfahren I‘, derzeit sieht ungefähr so ​​Erkennen einer absoluten Web-URL auch ohne Schema

public String checkPossiblyAbsolute(String url) { 
    if (url.matches("^(\\/\\/)?([-_A-Za-z0-9]+\\.)+\\w{2,3}(\\/.*)?$")) { 
     if (url.startsWith("//")) url = "http:" + url; 
     else url = "http://" + url; 
    } 
    return url; 
} 

Grundsätzlich verwenden, überprüft es für Punktfolgen der Zeichen getrennt A-Z, a-z, 0-9, - und _, wo die letzte Sequenz (die TLD) enthält genau 2 oder 3 Buchstaben. Außerdem kann die Zeichenfolge mit einem optionalen // beginnen. Meine Tests funktionieren so, wie ich es erwartet habe, aber ich möchte wirklich einen leichteren (oder besser lesbaren) Weg finden, dies zu tun. Irgendwelche Gedanken?

Antwort

0

Leider erlaubt es Java nicht, doppelte Entweichungen zu vermeiden. (Einige Sprachen erlauben @"une\scapedRegex").

Es gibt jedoch einige Änderungen, die Sie an der Regex-Syntax vornehmen können.

  • \\. kann [.] nicht kürzer, werden aber IMHO besser lesbar.
  • Gleiches mit \\/. Machen Sie es [/].
  • Sie können A-Z loswerden, wenn Sie die Groß-/Kleinschreibung nicht beachten. Kann es nicht wert sein, wenn Sie nur eine A-Z haben.

Es gibt mehr nicht viel Sie tun können, außer in Variablen, die Dinge. Auch hier ist es vielleicht nicht wert, wenn Sie nur ein paar Redundanzen haben, aber es könnte die Lesbarkeit verbessern. Du benutzt Java, also gewinnst du sowieso kein Code-Golf.