Самый простой способ проверить список строк - alphanumeri c только в java - PullRequest
0 голосов
/ 26 января 2020

Я знаю, что для проверки строки это alphanumeri c в Java это

String s1="adA12";
s1. matches("[a-zA-Z0-9]+");

Но как проверить список - это alphanumeri c самый простой способ, кроме итерации всего элемента в списке ? Я использую Java 8 и Spring boot 1.x. Спасибо!

Ответы [ 4 ]

2 голосов
/ 26 января 2020
Predicate<String> alphaNumaricFilter = Pattern.compile("[a-zA-Z0-9]+").asPredicate();

Boolean isListAlphaNumric =list.stream().allMatch(alphaNumaricFilter);

Я думаю, это может быть самый простой и простой способ?

0 голосов
/ 26 января 2020

Я думаю, что самым простым и быстрым способом было бы объединить все элементы в одну строку, а затем все, что вам нужно, это один раз проверить alphanumeri c:

List<String> strs = ...
boolean isAllAlphanumeric = StringUtils.isAlphanumeric(String.join("", strs));
0 голосов
/ 26 января 2020

Вы должны перебрать свою коллекцию строк как-то (исключая любые неэффективные хаки объединения всех строк до и затем тестирования полной строки - но за кулисами это тоже перебор коллекции!)

Но один правильный подход, вероятно, будет использовать потоки:

// pre-compiling the pattern avoids having the runtime parse the
// regex for every single item in your collection, which can become slow
private static final Pattern VALID_PATTERN
    = Pattern.compile("^[a-zA-Z0-9]+$"); // ^ and $ anchors to prevent from having other characters

private static boolean validate(final String s) {
    return VALID_PATTERN.matcher(s).matches();
}

// later, in your logic:
void yourBusinessLogic() {
    final List<String> strings = List.of("abc", "123", "some_thing");
    final boolean allValid = strings.stream()
            .allMatch(YourClass::validate);
}
0 голосов
/ 26 января 2020

В конечном итоге, у вас нет выбора, кроме как просмотреть все элементы списка и проверить их по одному (или, по крайней мере, все элементы, пока вы не провалите проверку). Java 8 действительно предлагает немного сахара syntacti c, чтобы сделать этот аккуратнее, хотя:

boolean allAlphaNumeric = myList.stream().allMatch(s -> s.matches("[a-zA-Z0-9]+"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...