我试图找出一个字符串出现在另一个字符串中的次数。对于我的测试,我使用“ea”代替wordOne,“Ilikedthebestontheeastbeachleast”代表wordTwo。我的输出为我的“外观”变量返回2,它应该存储word2中“ea”出现的次数。它应该返回3.
我已经尝试搞乱变量初始化,并尝试以不同的方式考虑数学,但我几乎没有想法。
以下是相关的代码部分:
int wordTwoLength = wordTwo.length();
System.out.println(wordTwoLength);
while (wordTwoLength > 0)
{
positionCount = wordTwo.indexOf(wordOne, positionCount);
appearances++;
wordTwoLength = (wordTwoLength - positionCount);
}
System.out.println(appearances);
谢谢!
编辑:我忘了添加我尝试了其他测试输入并获得了疯狂的输出。对于某些人来说,它会使数字高于预期,而对其他人来说则会更低。
答案 0 :(得分:0)
所以现在问题是.indexOf仍然在wordTwo中返回“ea”的真实索引 - 它没有考虑你从哪里开始。此外,将positionCount设置为等于您找到该单词的位置,然后再次从该位置搜索,只会让您立即找到该单词的相同实例,而不是下一个单词。
wordTwo中第一个“ea”实例的索引是18,所以wordTwoLength将设置为32-18或14.然后你会在wordTwo中找到相同的ea实例,而wordTwoLength将被设置为14-18,或-4。然后你将退出while循环,外观为2。
答案 1 :(得分:0)
for (int index = 0; (index = wordTwo.indexOf(wordOne, index)) > -1; index ++)
appearances ++;
答案 2 :(得分:0)
您可以通过“将字符串转换为字符数组”来简化您的上述工作。因为它会更高效(我认为)。我在这里提供了一个示例代码,
String wordOne="Ilikedthebestontheeastbeachleast";
String wordTwo="ea";
int count=0;
char[] arrayOne=wordOne.toCharArray();
char [] arrayTwo=wordTwo.toCharArray();
for(int i=0;i<=((arrayOne.length)-1);i++)
{
if(arrayTwo[0]==arrayOne[i]&&arrayTwo[1]==arrayOne[i+1])
count+=1;
}
System.out.println("Pattern found "+count+" times.");
这将符合您的需要,但使用For循环。
答案 3 :(得分:0)
尝试这个更简单的代码:
class Demo{
public static void main(String[] args){
String wordOne = "ea";
String wordTwo = "Ilikedthebestontheeastbeachleast";
String[] arr = wordTwo.split(wordOne);
int cnt = arr.length - 1;
System.out.printf("[%s] has occured for %s time(s) in [%s]", wordOne, cnt, wordTwo);
}
}