我想检查String是否包含某个子字符串n次。我知道我能做到:
Assertions.assertThat(myString).contains("xyz");
甚至
Assertions.assertThat(myString).containsOnlyOnce("xyz");
但我如何确保这一次?
我尝试过类似的事情:
Assertions.assertThat(myString).areExactly(n, myString.contains("xyz"));
但遗憾的是这不可编辑。
有什么想法吗?
答案 0 :(得分:9)
您可能正在寻找StringUtils.countMatches
计算一个字符串在另一个字符串中的出现次数
答案 1 :(得分:1)
您可以使用像这样的正则表达式来测试字符串“ myString”的子字符串“ xyz” n次。
Assertions.assertThat(myString).containsPattern("(xyz.*?){n}");
您可以将n替换为要测试的子字符串的计数。
答案 2 :(得分:0)
您可以执行以下操作:
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);
}
我没有测试过这段代码,但它应该有效。
答案 3 :(得分:0)
AssertJ的方式是使用Condition,但它需要一些工作来实现它,所以我会使用StringUtils.countMatches作为Rahul Tripathi建议。
答案 4 :(得分:0)
Hamcrest具有用于正则表达式的匹配器。你可以做
assertThat(actual, matchesPattern("(mystring.*?){2}))
哪个会测试mystring
正确显示两次
http://hamcrest.org/JavaHamcrest/javadoc/2.0.0.0/org/hamcrest/text/MatchesPattern.html
是的,另一个库,但是对于断言,这应该是您唯一需要的一个。 :-)