2016-04-04 7 views
0

私は厳密なURLパーサーのやり方ではなく、ブラウザのアドレスバーのような絶対URLと相対URLとを区別するJavaメソッドを開発しています。つまり、スキームが存在するかどうかにかかわらず、ホストで始まるURLを絶対URLとして認識するようにします。 そうすれば、スキームが完全に省略されたスキーム(たとえば、//example.comなど)とURL(example.comwikipedia.orglots.and-lots.of.domains.com.ngなど)を正しく認識します。私は「メソッド、現在このスキームなしでも絶対Web URLを認識

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; 
} 

のように見える何かを使用して基本的には、ドットをチェックするには、最後のシーケンス(TLD)は、正確に2が含まれている文字A-Za-z0-9-、および_のシーケンスを分離しました3文字です。また、文字列はオプションの//で始まることもあります。私のテストは私が期待した通りに動作しますが、実際にこれを行うための簡単な方法(または少なくとも読みやすい方法)を探したいと思っています。何かご意見は?

答えて

0

残念ながら、Javaでは二重にエスケープすることはできません。 (一部の言語では@"une\scapedRegex"が許されています)。

ただし、正規表現の構文にいくつかの変更を加えることができます。

  • \\.[.]ない短くなりますが、私見読みやすくすることができます。
  • \\/と同じです。それを[/]にします。
  • 大文字と小文字を区別しないモードを使用すると、A-Zを取り除くことができます。ただ1つだけ持っていると価値がないかもしれません。A-Z

変数で物事を入れ除き、はるかにあなたが行うことができますがありません。もう少し冗長性があれば価値はないかもしれませんが、読みやすさが向上します。あなたはJavaを使用しているので、あなたはコードゴルフに勝っていません。