繁体   English   中英

检查字符串数组是否包含不带循环的子字符串

[英]Check if String Array contains a Substring without loop

我想在不使用循环的情况下在字符串数组中找到子字符串。 我正在使用:

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

我总是得到找不到。 这种方法有什么问题?

您正在检查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);
}

如果仅在String末尾搜索“ .csv”子String (即视为后缀),则应使用endsWith而不是contains

您可能需要检查文件扩展名,并可以使用endsWith代替它,并将您的条件改善为:

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

我不是流媒体专家,但我相信您想要这样的东西:

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#endsWith

我们也可以在这里使用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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM