2016-11-29 18 views
0

我有四個不同的擴展名的網址,我只是想阻止一個特定的URL取決於。擴展。 我怎麼能這樣做? 我有使用if條件,但如果不給我我的願望了把 我已經做到了這一點代碼我怎麼能阻止一個字符串數組的特定網址

String line[]={"https://google.com","https://www.facebook.swf","http://www.hotstar.com","http://www.deathbycaptcha.com/user/login.js"}; 

for(int i=0;i<=line.length;i++){ 
    String ln=line[i]; 

    if(ln.endsWith(".css")){ 
     break; 
    } 
    if(ln.endsWith(".js")){ 

    } 
    if(ln.endsWith(".jpg")){ 
     break; 
    } 

    if(ln.endsWith(".fla")){ 
     break; 
    } 
    if(ln.endsWith(".swf")){ 
     break 
    } 
    else{ 
     System.out.println("urls :"+ln); 
    } 
} 

我怎麼能做到這一點 這是否是在開關盒或其他,那麼請幫助我。 在此先感謝。

+0

將第二個及後續的if if更改爲else if –

+0

輸出是什麼你期待? – Jobin

+0

如果您只休息一下,請將條件重新組合爲具有'||'的條件。你可能想要'繼續'而不是'break'來檢查數組的其餘部分 – AxelH

回答

0

您使用的是break即停止循環,如果你要檢查的全循環,但跳過這個邏輯特定的一個,你需要使用continue

中斷將停止循環,沒有任何檢查。

繼續將停止循環的語句塊,並將再次檢查循環的條件,這將不會退出循環。

我冒昧地將測試重組爲一個if子句。

for(int i=0;i<=line.length;i++) 
{ 
    String ln=line[i]; 
    if(ln.endsWith(".css") 
       || ln.endsWith(".fla") 
       || ln.endsWith(".swf") 
       || ln.endsWith(".jpg"))){ 
     continue; 
    } else { 
     System.out.println("urls :"+ln); 
    } 
} 

但是你可以簡單地恢復條件印刷品,如果這是不喜歡.cssfla ...沒有else子句

+0

對於測試,P1gu是一個很好的解決方案,我沒有花時間更新它,因爲他已經完成了 – AxelH

1

您可以使用正則表達式來實現這一目標:

import java.util.regex.*; 

public class TestRegex { 
    public static void main(String []args){ 
     String[] line = new String[] { 
      "https://google.com", 
      "https://www.facebook.swf", 
      "http://www.hotstar.com", 
      "http://www.deathbycaptcha.com/user/login.js" 
     }; 

     // End with .js or .swf 
     String regex = "(?<=(\\.js)|(\\.swf))$"; // You can create a builder to build a dynamic regex 

     Pattern re = Pattern.compile(regex); 

     for (String ln : line) { 
      Matcher m = re.matcher(ln); 
      if (m.find()) { 
       System.out.println(ln); 
      } 
     } 
    } 
} 

由於@AxelH指出,我們需要檢查是否每個字符串不具有特定擴展名結尾的情況。在這種情況下,我們只需要改變這樣的正則表達式:(?<!(\\.js)|(\\.swf))$

我也將更新原來的情況下的正則表達式,你看到對面:(?<=(\\.js)|(\\.swf))$

查看更多有關正面和負面的回顧後在這裏:lookaround

+1

問題是,這應該是相反的,他需要檢查那些沒有特定擴展名的。但這很好。 – AxelH

+0

@AxelH感謝您的意見。在這種情況下,我們只需要將正則表達式更改得更復雜一些:'(?<!(\\。js)|(\\。swf))$'。我認爲在這種情況下我們仍然可以構建一個正則表達式構建器。我會更新我的答案。 –

+1

我同意,這只是改變的正則表達式(以及它的模板)。解決方案仍然很好。 – AxelH

0
String line[]={"https://google.com","https://www.facebook.txt"}; 
    String extensionToBlock[]={".com",".swf"}; 

    for (String url:line) { 
     for (String ext:extensionToBlock) { 
      if (url.endsWith(ext)){ 
       //url bloc 
       System.out.println("not valid url :"+url); 
       break; 
      }else{ 
       //url ok 
       System.out.println("valid url :"+url); 
       //call a function with url ?; 
      } 
     } 
    } 
+1

不錯的解決方案,但請不要只發布代碼...這沒有幫助 – AxelH

+0

最好包含一些解釋和代碼。否則,你可能會讓人對你的答案投票低估 – khuderm

0

做這樣的事情:

public static void main(String[] args) { 

     String lines[] = { "https://google.com", "https://www.facebook.swf", "http://www.hotstar.com", 
       "http://www.deathbycaptcha.com/user/login.js" }; 

     for (String line : lines) { 
      String extension = line.substring(line.lastIndexOf(".")); 

      switch (extension) { 
      case ".com": 
       // bla bla bla 
       break; 
      case ".jpg": 
       // its an image 
       break; 
      case ".css": 
      case ".js": 
       // CSS or Javascript 
       break; 
      default: 
       break; 
      } 

     } 
    } 

請注意,切換字符串僅在JRE版本中支持> 6

+0

什麼時候Webserver會提供一個下載到「file.tar .gz「,他將無法過濾這些;)請爲此代碼添加一些解釋...代碼只是沒有幫助 – AxelH

+0

他只會檢查」.gz「,除非他關心」* .gz「和「.tar.gz」 –

+0

使用tar和gzip不是同一個文件,這是我想到的第一個例子,只是說這不是防彈的;) – AxelH

相關問題