Java 如何确保一个字符串的子字符串正好有n次?
我想检查一个字符串是否包含某个子字符串n次。我知道我能做到:Java 如何确保一个字符串的子字符串正好有n次?,java,junit,tdd,assertj,Java,Junit,Tdd,Assertj,我想检查一个字符串是否包含某个子字符串n次。我知道我能做到: Assertions.assertThat(myString).contains(“xyz”) 甚至 Assertions.assertThat(myString).containsOnlyOnce(“xyz”) 但我怎样才能保证n次 我试过这样的方法: String testString = "XXwwYYwwLOK"; int count = 0; while (testString
Assertions.assertThat(myString).contains(“xyz”)代码>
甚至
Assertions.assertThat(myString).containsOnlyOnce(“xyz”)代码>
但我怎样才能保证n次
我试过这样的方法:
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);
}
Assertions.assertThat(myString.arequickly)(n,myString.contains(“xyz”)代码>但遗憾的是,这是不可编译的
有什么想法吗?你可能正在寻找
统计一个字符串在另一个字符串中出现的次数
你可以这样做:
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);
}
我没有测试这段代码,但它应该可以工作。AssertJ的方法是使用,但它需要一点工作来实现它,所以我将使用StringUtils.countMatches,正如Rahul Tripathi建议的那样。Hamcrest有正则表达式的匹配器。你可以
assertThat(实际,匹配模式(((mystring.*?){2}))
这将测试mystring
是否正好显示两次
是的,还有另一个库,但对于断言,这应该是您唯一需要的库。:-您可以使用这样的正则表达式,它测试字符串“myString”有n次子字符串“xyz”
您可以用要测试的子字符串的计数替换n。这是一个棘手的问题。assertThat(“aaa”)呢。assertThat(“aaa”)是什么意思?确切地说是(2,“aa”)
?这是真的吗?@Tunaki不,这甚至不正确compile@JoelCostigliola我知道它不会编译。重点不是编译,而是它应该返回什么。是“aa“
在“aaa”
中出现2次或1次?”?这就是为什么我说这很棘手还有另一个图书馆。。。Kayaman我想他实际上指的是assertj
库(他用来测试断言的库),而不是aspectj
:-)从这个角度来看(看看已经实现了多少不同的断言,assertj
),除了containsOnlyOnce(String expected)
,还有containsStimes(int n,String expected)
,这将非常方便,但在这种情况下,这并不能回答问题,因为OP要求在单元测试中执行此操作,最好是使用匹配器。除此之外,最好不要发布您没有运行的代码。