[英]To check if a given string contains a substring without using contains or indexOf method
[英]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.