2017-05-05 5 views
1

私はhref属性を取得するためにjsoupのメソッドattr()を使用しているElementリストを持っています。 ここに私のコードの一部です:Jsoupを使用して余分な文字なしでhrefリンクを取得するにはどうすればよいですか?

String searchTerm = "tutorial+programming+"+i_SearchPhrase; 
    int num = 10; 
    String searchURL = GOOGLE_SEARCH_URL + "?q="+searchTerm+"&num="+num; 
    Document doc = Jsoup.connect(searchURL).userAgent("chrome/5.0").get(); 
    Elements results = doc.select("h3.r > a"); 
    String linkHref; 

    for (Element result : results) { 
     linkHref = result.attr("href").replace("/url?q=",""); 
     //some more unrelated code... 
     } 

ですから、例えば、私は、検索prase "テスト"、ATTR( "HREF")(最初のリストで)生成を使用する場合:

linkHref = https://www.tutorialspoint.com/software_testing/&sa=U&ved=0ahUKEwi_lI-T69jTAhXIbxQKHU1kBlAQFggTMAA&usg=AFQjCNHr6EzeYegPDdpHJndLJ-889Sj3EQ

私が唯一の希望:https://www.tutorialspoint.com/software_testing/

は、この問題を解決する最良の方法は何ですか?私はちょうど(私はどのように知っている)linkHrefにいくつかの文字列操作を追加するか、href属性に短いリンクを含むようにする方法がありますか? ありがとうございます

+0

あなたのリンクは、必ず上記の形式であることがわかっている場合は、最後のスラッシュを見つけ、以降そのインデックスからすべての文字を削除する文字列の 'のlastIndexOf()'メソッドを使用することができます。 –

+0

@ patrick-hainge最後のスラッシュの後に続く文字が何であるか、どこから来たのか分からないので、他のリンクが常に上記のフォーマットになっているかわかりません。 –

答えて

3

queryのパラメータを常に削除する場合は、String.indexOf()などを使用してください。

int lastPos; 
if(linkHref.indexOf("?") > 0) { 
    lastPos = linkHref.indexOf("?"); 
} else if (linkHref.indexOf("&") > 0){ 
    lastPos = linkHref.indexOf("&"); 
} 
else lastPos = -1; 

if(lastPos != -1) 
linkHref = linkHref.subsring(0, lastPos); 
+0

@ Atalia.d答えを更新しました。この場合、文字の最初のインデックスは '&' –

+0

です。これらの余分な文字の意味はわからないので、いつも同じフォーマットになるのでしょうか?即ちそれは「?」だけであるか?と "&"私は心配する必要がありますか? –

+1

@ Atalia.dこれらはクエリパラメータです。彼らはいつもそのように始まります。 –

関連する問題