java - 过滤样本字符串中包含的项目

标签 java hamcrest lambdaj

我想使用 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/

相关文章:

java - 当我尝试从我的 webapp 在 tomcat 服务器中发送 get 或 post https 请求时出现 SSLHandshakeException

java - 使用 Mockito 的 argThat() 匹配器导致 "method ambiguous for the type"错误

spring - 关于Spring MVC测试API的model()。attribute()方法的询问

Java Hamcrest匹配器相当于sql连接操作

java - Lambdaj FinalClassArgumentCreators 的应用程序范围的配置。在哪里以及如何做?

java - 检查另一个用户是否有写文件的权限

java - Java : Cross Platform Issues? 中的 RSA 加密

Java-多边形和线的交点

java - Hibernate 和 Lambdaj 的分组问题

java - 用于过滤和修改列表项的 Lambdaj 或 apache 谓词