我知道apache-commons有一个叫做StringUtils的实用类,可以为您提供优雅的解决方案。
public boolean foo(String[] array, String pattern){
for(String content : array){
if(StringUtils.contains(content, pattern){
return true;
}
}
return false;
}
我不喜欢的一件事是它只会在第一个找到的实例中返回true。我不完全确定你试图做什么,但如果你不关心数组中不匹配模式的索引,我建议使用称为filter的高阶函数。
Guava、lambdaJ和Apache-Commons是支持函数式编程的库。
以下是一些在Apache-Commons中应该可以工作的伪代码。
List<String> content = Arrays.asList(strArray);
Predicate matchesPattern = new Predicate("asdf"){{
private String pattern;
public Predicate(String pattern){
this.pattern = pattern;
}
@Overload
public boolean evaluate(Object input){
if(input instanceOf String){
StringUtils.contains((String)input, pattern
}
return false;
}
}};
CollectionUtils.filter(content, matchesPattern);
这个方法的作用是从列表中删除不符合模式的任何字符串。如您所见,声明一个Predicate对象有点冗长。如果您使用Apache-Commons或Guava,它看起来会很相似,但这就是lambdaJ的用处。
Predicate只是一个术语,表示接受单个参数并返回布尔值的函数,您可能已经在Matcher类中使用过它们。Hamcrest拥有一些最好的Matcher库可用,因此lambdaJ只是在其周围构建了一个函数编程库。它易于使用且高度可读。
indexOf(..)
。 - MrSmith42break
时没有任何“坏处”。 - MrSmith42String.contains()
函数来查找子字符串。 - Florent Guillaumeretval
,然后再进行测试,我会感觉更好。 - Robert Harvey