Как я могу проверить, содержит ли String доменное имя, указанное в ArrayList и имеющее несколько доменов в Java? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь разрешить запрос только от определенных доменов, перечисленных в ArrayList, поэтому мне нужно поставить условную проверку, если URL содержит домены, перечисленные в ArrayList, и разрешить в противном случае генерировать исключение.

Предположим, мой ArrayList = [abc.com, def.com, xyz.com] Я хочу проверить, содержит ли мой URL какой-либо из этих доменов из ArrayList, затем вернуть true, иначе вернуть false.

Я попробовал приведенный ниже код, но он проверяет доменное имя по одному. Тем не менее, он возвращает ложь, если имя домена является действительным -

ArrayList = [abc.com, def.com, xyz.com]

public static boolean isListContainValidDomain(List<String> arraylist) {
String reqURL = "dev.def.com";
boolean isValid = true;

    for (String str : arraylist) {

        if(!reqURL.contains(str.toLowerCase())){
            isValid = false;
        }
    }
    return isValid;
}

Может кто-нибудь, пожалуйста, помогите в этом.

Ответы [ 4 ]

2 голосов
/ 28 марта 2019

Вы должны инвертировать условие. Как и сейчас, ваша функция будет возвращать true, только если ваша строка содержит все строки в списке.

public static boolean isListContainValidDomain(List<String> arraylist) {
    String reqURL = "dev.def.com";

    for (String str : arraylist) {
        if (reqURL.contains(str.toLowerCase())) {
            return true;
        }
    }

    return false;
}
1 голос
/ 28 марта 2019

Вы можете использовать Streams api:

public static boolean isListContainValidDomain(List<String> arraylist) {
    final String reqURL = "dev.def.com";
    boolean isValid = arraylist.stream().anyMatch(domain -> reqURL.contains(domain));
    return isValid;
}
1 голос
/ 28 марта 2019

Почему бы вам не создать регулярное выражение, включающее все домены.По сути, ваш ArrayList = [abc.com, def.com, xyz.com] должен быть преобразован в строку, которая выглядит как (abc.com | def.com | xyz.com), тогда вы можете просто выполнить одно совпадение с регулярным выражением.

0 голосов
/ 28 марта 2019

Поскольку URL может иметь доменное имя в любом месте (abc.computer.xxx.com), я думаю, вы должны использовать endsWith.Вот решение с использованием потоков

 boolean isOk = arrayList.stream().anyMatch( dom -> reqUrl.endsWith(dom.toLowerCase()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...