Проверьте, содержит ли String Array подстроку без цикла - PullRequest
0 голосов
/ 04 февраля 2019

Я хочу найти подстроку в массиве строк, без использования цикла.Я использую:

import java.util.Arrays;

public class MyClass {
    public static void main(String args[]) {

        String[] files = new String[]{"Audit_20190204_061439.csv","anotherFile"};
        String substring= ".csv";

        if(!Arrays.stream(files).anyMatch(substring::contains)) {
            System.out.println("Not found:" + substring);
        }
    }
}

Я всегда получаю Не найдено.Что не так с подходом?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Я не гуру потоков, но я считаю, что вы хотите что-то вроде этого:

String[] files = new String[] { "Audit_20190204_061439.csv", "anotherFile" };

for (String file : files) {
    if (file.endsWith(".csv")) {
        System.out.println("found a CSV file");
    }
}

Я использую String#endsWith здесь, потому что предположительно .csv относится к расширению файла, и должен только зарегистрироватьсяУдар, если произойдет в конце имени файла.

Мы могли бы также использовать String#matches здесь:

Pattern pattern = Pattern.compile(".*\\.csv$");
for (String file : files) {
    Matcher matcher = pattern.matcher(file);
    if (matcher.find()) {
        System.out.println("found a CSV file");
    }
}
0 голосов
/ 04 февраля 2019

Возможно, вам нужно проверить расширение файла и вместо него использовать endsWith и улучшить свое состояние до:

if (Arrays.stream(files).noneMatch(a -> a.endsWith(substring))) {
    System.out.println("Not found:" + substring);
}
0 голосов
/ 04 февраля 2019

Вы проверяете, не содержит ли String ".csv" какие-либо элементы вашего Stream, что противоположно тому, что вы хотели.

Это должно быть:

if (!Arrays.stream(files).anyMatch(s -> s.contains(substring))) {
    System.out.println("Not found:" + substring);
}

PS Как прокомментировано, вы можете использовать noneMatch вместо anyMatch, что избавит от необходимости отменять условие:

if (Arrays.stream(files).noneMatch(s -> s.contains(substring))) {
    System.out.println("Not found:" + substring);
}

и если подстрока ".csv" должнаискать нужно только в конце String (то есть рассматривать как суффикс), вы должны использовать endsWith вместо contains.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...