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 - 在 GAE 上使用 Hamcrest 1.3 和 Maven 的 NoSuchMethodError

java - 如何使用 lambdaj 或其他工具过滤表

java - 使用 Java/App Engine 向 Blogger 发出 API 请求的正确形式 - 错误 401

java - 如何扫描整个 C 盘的播放列表

java - 类名必须在方法之前,必须是 MatcherAssert.assertThat() 而不仅仅是 assertThat()?

Java : How to do aggregation over a list supporting min, 每组中的最大值、平均值、最后一种聚合

java - LambdaJ 类属性匹配器

java - 如何从代码中扩展 Java 类路径通配符?

java - 如何编写过滤后的 IObservableList

java - hamcrest:如何匹配数组是另一个数组的子集?