15

我想检查一个字符串是否包含某个子字符串 n 次。我知道我可以做到:

Assertions.assertThat(myString).contains("xyz");

甚至 Assertions.assertThat(myString).containsOnlyOnce("xyz");

但是我怎样才能保证这 n 次呢?

我试过类似的东西:

Assertions.assertThat(myString).areExactly(n, myString.contains("xyz"));但遗憾的是,这是不可编译的。

有任何想法吗?

4

5 回答 5

14

您可能正在寻找StringUtils.countMatches

计算一个字符串在另一个字符串中出现的次数

于 2015-12-15T14:16:10.607 回答
4

你可以有这样的正则表达式,它测试字符串“myString”有 n 次子字符串“xyz”。

Assertions.assertThat(myString).containsPattern("(xyz.*?){n}");

您可以将 n 替换为要测试的子字符串的计数。

于 2020-03-25T08:46:17.883 回答
0

AssertJ 方法是使用Condition但它需要一些工作来实现它,所以我会使用 StringUtils.countMatches 正如 Rahul Tripathi 建议的那样。

于 2015-12-15T20:37:35.387 回答
0

Hamcrest 有正则表达式的匹配器。你可以做

assertThat(actual, matchesPattern("(mystring.*?){2}))

这将测试mystring恰好出现两次

http://hamcrest.org/JavaHamcrest/javadoc/2.0.0.0/org/hamcrest/text/MatchesPattern.html

是的,另一个库,但对于断言,这应该是您唯一需要的。:-)

于 2019-09-11T16:40:05.107 回答
-1

您可以执行以下操作:

        String testString = "XXwwYYwwLOK";
        int count = 0;
        while (testString.contains("ww")) {
            count++;
            int index = testString.indexOf("ww");
            if(index + 1 == testString.length()){
                break;
            }
            testString = testString.substring(index + 1);
        }

我没有测试这段代码,但它应该可以工作。

于 2015-12-15T14:30:41.160 回答