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

时间:2019-02-04 07:23:47

标签: java arrays java-stream

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

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 :(得分:3)

您正在检查String“ .csv”是否不包含Stream的任何元素,这与您想要的相反。

应该是:

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

P.S。如前所述,您可以使用noneMatch代替anyMatch,这样可以省去否定条件的需要:

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

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

答案 1 :(得分:2)

您可能需要检查文件扩展名,并可以使用endsWith来改善文件的状态,

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

答案 2 :(得分:1)

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

<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  

<div id="top-bar" name="top-bar">
    <button type="button" id="btn-month1" class="btn-month">Month 1</button>  
 <button type="button" id="btn-month2" class="btn-month">Month 2</button>  
</div>

我在这里使用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