2016-11-29 44 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