我想在不使用循环的情况下在字符串数组中找到子字符串。我正在使用:
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);
}
}
}
我总是找不到。这种方法有什么问题?
答案 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