我正在尝试解决这个问题,但它似乎没有任何作用。我试图搜索问题,但所有其他答案使用方法或数组,我们还没有研究它们所以我必须解决循环问题。这是个问题:
编写一个程序,返回另一个字符串中出现的字符串数 例如
输入:
第一个字符串:
第二串:学生们正在工程学院努力工作,因为他们喜欢它 输出:
3
这是我试过的:
Scanner input = new Scanner(System.in);
String s1 = input.nextLine();
String s2 = input.nextLine();
int count = 0;
String text="";
for(int i = 0; i<s1.length(); i++){
for(int j =0; j<=s2.length() ; j++){
if(s1.charAt(i)==s2.charAt(j) && i ==0){
for(int m=1; m<s1.length();m++){
if(s1.charAt(i+1)==s2.charAt(j+1)){
if(m==s1.length()){
count++;
}else{
break;
}
}
}
}
}
}
System.out.println(count);
我认为我的逻辑有问题。这就是我的想法:程序应该检查第一个字符串的第一个字母,然后检查它是否检查它是否等于第二个字符串的第一个字母,然后如果它不等于它,那么程序应该循环通过第二个字符串,直到它找到一个字母等于第一个字符串的第一个字母,如果它找到一个等于第一个字符串的字母,它检查第一个字符串的第二个字母是否等于另一个字符串的下一个字母,如果是,那么它检查这是否是第一个字符串的最后一个字母,如果是,则count增加1,如果不是则循环下一个字符。我尝试用其他几种方法来完成我的代码。有人能用这个逻辑来帮助我吗?
答案 0 :(得分:1)
程序应检查第一个字符串的第一个字母,然后检查它是否检查它是否等于第二个字符串的第一个字母,
行
然后如果它不等于它,那么程序应该遍历第二个字符串,直到它找到一个等于第一个字符串的第一个字母的字母,
如果这是你想要做的,那么遍历s2应该是你最外层循环的基础。但是你已经用遍历s1作为最外层循环来编写它。
如果它找到一个等于第一个字符串的字母,它会检查第一个字符串的第二个字母是否等于另一个字符串的下一个字母,如果是,那么它会检查这是否是第一个字符串的最后一个字母,如果是count增加1,如果不是则循环下一个字符。
行。所以你只需要一个索引到s2(外部循环),一个索引到潜在的匹配s1(内部循环)。除此之外你不需要另外一个循环。
最后一点,请注意外循环索引(遍历s2)加上内部索引(遍历潜在匹配)的总和不超过s2的界限。正如你现在所写的那样,它可以超过字符串长度,事实上确实如此。
String s1 = "the";
String s2 = "the students are working hard in the faculty of Engineering because they love it";
int count = 0;
assert(!s1.isEmpty());
int s2LastPositionOfPotentialMatch = s2.length() - s1.length();
for(int i = 0; i < s2LastPositionOfPotentialMatch + 1; i++){
for(int j = 0; j < s1.length(); j++) {
if(s1.charAt(j) != s2.charAt(i+j)) {
break;
} else if(j + 1 == s1.length()) {
count++;
}
}
}
System.out.println(count);