2016-11-29 3 views
0

У меня есть четыре URL разных расширений, я просто хочу блокировать определенные URL-адреса в зависимости от расширения. как я могу это сделать? я есть использовать при условии, но если не дать мне мое желание из положить я сделал этот кодКак я могу заблокировать определенный URL-адрес из строкового массива

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' на' else if' –

+0

что такое вывод вы ожидаете? – Jobin

+0

Если вы делаете перерыв, перегруппируйте условия в один с помощью '||'. И вы, вероятно, хотите «продолжить» вместо 'break', чтобы проверить остальную часть массива. – AxelH

ответ

0

вы используете break, что остановить цикл, если вы хотите, чтобы проверить полный цикл, но пропустить определенный один с этой логикой, вам нужно использовать continue.

Перерыв остановит цикл, в котором он находился, без каких-либо проверок.

Продолжить остановит блок оператора цикла и снова проверит состояние цикла, это не приведет к выходу из цикла.

Я взял на себя смелость перегруппировать тесты в один if-clause.

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

Но вы могли бы просто обратить условие для печати, если это не так, как .css или fla ... без оговорки еще

+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 Спасибо за точку. В этом случае нам просто нужно немного изменить регулярное выражение следующим образом: '(?

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

     } 
    } 

Обратите внимание, что switch over String поддерживается только в версиях JRE> 6

+0

Когда Web-сервер предоставит вам загрузку в файл file.tar .gz ", он не сможет отфильтровать их;) Пожалуйста, добавьте некоторые пояснения к этому коду ... Код только не помогает – AxelH

+0

Он просто проверяет« .gz », если он не заботится о« * .gz », и ".tar.gz" –

+0

Использование tar и gzip - это не тот же файл, и это первый пример, который пришел мне на ум, просто говоря, что это не доказательство пули;) – AxelH

Смежные вопросы