-1

JAVAでドメイン名だけをパースしたい。例えば、

http://facebook.com/bartsf
http://www.facebook.com/pages/Shine-Communications/169790283042195
http://graph.facebook.com/100002306245454/picture?width=150&height=150
http://maps.google.com/maps?hl=en&q=37.78353+-122.39579
http://www.google.com/url?sa=X&q=http://www.onlinehaendler-news.de/interviews/1303-abba24-im-spagat-zwischen-haendler-und-kaeuferinteressen.html&ct=ga&cad=CAEQARgAIAAoATABOAFAnqSQjwVIAVAAWABiAmRl&cd=xa_cHWHNG70&usg=AFQjCNFMgnkzqN0fNKMFKz1NTKK1n9Gg9A

これがマップ削減コードを書いている私のコードです。

 String[] whiteList={"www.facebook.com","www.google.com"};
 UrlValidator urlValidator=new UrlValidator(schemes);
 Readfile line by line

for line in file
{
            String sCurrentLine=line;
            if(sCurrentLine.length()>=3)
            {
                String tempString=sCurrentLine.substring(0,3);

                if(!tempString.equals("192") && !tempString.equals("172") && !tempString.equals("10."))
                {

                    sCurrentLine="http://"+sCurrentLine;
                    if(urlValidator.isValid(sCurrentLine))//domain filter should be here
                    {
                           System.out.println(sCurrentLine);
                    }
                }
                tempString="";
            }
 }

ドメイン名が facebook.com または google.com のいずれかであり、上記のすべての URL が除外されるかどうかをフィルタリングしたい。

4

2 に答える 2

8

java.net.URI文字列を URI として解析するために使用します。ここで車輪を再発明する必要はありません。

URI foo = new URI("http://facebook.com/bartsf");
String host = foo.getHost(); // "facebook.com"
于 2013-07-15T17:54:00.670 に答える
2

または、URL クラスを使用できます。

URL url = new URL("http://www.facebook.com/pages/Shine-Communications/169790283042195");
String host = url.getHost();
// 'indexOf' is required since the root domain is all you care about. This handles
//  bob.facebook.com as well as facebook.com 
if (host.indexOf("facebook.com") >= 0 || host.indexOf("google.com") >= 0) {
    ... got one of those ...
} else {
    ... got something else ...
}

try ... catchまったく URL ではない可能性がある URL コンストラクターに文字列を渡す処理を処理するために、いくつかのものを追加する必要があります。

file://また、 aまたは aを渡した場合、これが問題になる場合は、おそらく希望どおりにならないことに注意してください mailto:

このクラスを使用して私が見た最大の問題は、javadocs のどこにもすべての用語が定義されていないことです。たとえば、パスは何ですか?getPath()「この URL のパス部分を取得します」という javadoc を持つメソッドによって返されます。正確には何が含まれているのか疑問に思うかもしれません。URL の最後の部分 ( の前?または#ある場合) が含まれているかどうか疑問に思いました。(答えはノーです。URL の最後?または前の最後のスラッシュまでだけです。)#

質問を展開して続行

私はこの行が好きではありません:

String tempString=sCurrentLine.substring(0,3);
if (!tempString.equals("192") && !tempString.equals("172") && !tempString.equals("10."))

しかし、私はこれが好きです:

if(!sCurrentLine.startsWith("192.168.") && !sCurrentLine.beginsWith("172.") && !sCurrentLine.startsWith("10."))

ホワイトリストに「facebook.com」と「google.com」のみを含めると、「www」はそれほど重要ではなく、両方の会社に多くのサブドメインがあるため、うまく機能すると思います。

上記のコードはUrlValidatorクラスに含まれます。

于 2013-07-15T17:55:16.103 に答える