我想使用 Lambdaj 和 hamcrest 匹配器来简单地检查示例字符串是否至少包含列表的一项。
private static List<String> FIELDS=Arrays.asList("one","two","three","four");
String myString="This string may contain 'one' word or 'two' word";
boolean stringContainsItem=filter(Matchers.containsString(myString),FIELDS).isEmpty();
但是匹配器不正确。 我在那个地方需要一些反向匹配器,它检查 myString 是否包含列表的项目。
最佳答案
您可以编写自己的匹配器:
private static List<String> FIELDS=Arrays.asList("one","two","three","four");
String myString="This string may contain 'one' word or 'two' word";
boolean stringDoesNotContainItem=filter(createIsInStringMatcher(myString),FIELDS).isEmpty();
与:
private TypeSafeMatcher<String> createIsInStringMatcher(final String string) {
return new TypeSafeMatcher<String>() {
@Override
public void describeTo(Description description) {
}
@Override
protected boolean matchesSafely(String item) {
return string.indexOf(item) >= 0;
}
};
}
编辑:还有另一个 Lambdaj 方法存在
,它允许以更紧凑的方式编写此内容:
List<String> FIELDS = Arrays.asList("one", "two", "three", "four");
String myString = "This string may contain 'one' word or 'two' word";
boolean stringContainsItem = Lambda.exists(FIELDS, createIsInStringMatcher(myString));
关于java - 过滤样本字符串中包含的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484934/