//你的代码很乱,你把一简单的事情想的太复杂;
//JAVA中用角标确定区间的时候有一个规律:含头不含尾;
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
String content="ladfjieiafiejleoliaefleoliajefleo";
String name = "leo";
int x=findContent(content,name);
System.out.println(name+"在"+content+"中出现了"+x);
}
public static int findContent(String s,String st)
{
int count=0;
int i=0;
int t=0;
/ /你无非就是想用一变量记录住st第一次出现的位置然后在第二次循环的时候从新的位置上开始检索嘛;
while(s.indexOf(st, i)!=-1) //1 这样写whlile((i=s.indexOf(st,i))!=-1)用i记录住了st第一次出现的角标;
{ //上面用i记住了st第一次出现的位置所以第二就从上次出现st的角标开始检索
t=i;//这个真心不懂是怎么回事; //i=i+st.length();之所以要加上st.length()是因为java中含头不含尾的规律;如果不加入st.length(),下次他还回把第一次出现
//st的位置返回去,也就是会死循环;
//返回count++就可以了;
i=s.indexOf(st, i);//2 这句就省略了;
if(i!=t)//这个也不懂;
count++;
}
return count;
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
修改后的代码;
public class StringTest {
public static void main(String[] args) {
String content="ladfjieiafiejleoliaefleoliajefleo";
String name = "leo";
int x=findContent(content,name);
System.out.println(name+"在"+content+"中出现了"+x);
}
public static int findContent(String s,String st)
{
int count=0;
/* int i=0;
while((i=s.indexOf(st, i))!=-1)
{
i=i+st.length();
count++;
}
*/
//用for循环其实简单;i只是作为一个变量存在,用完就会被释放,可以节约内存,代码更优化一些;
for(int i=0;(i=s.indexOf(st,i))!=-1;){
i=i+st.length();
count++;
}
return count;
}
}
|