各位看看下面程序有什么错误,老是和实际的不符  谢了先!public class Test{
public static void main(String[] args){
int a = calculate("This is a room"," ");
System.out.println(a);
int b = calculate("I am A teacher","a");
System.out.println(b);
int c = calculate("This is a room","is");
System.out.println(c);
int d = calculate("aaaa","aa");
System.out.println(d);
}

public static int calculate(String str,String substr){
int ch = 0;
int j = 0;
String str1;
for(int i=0;i<=str.length();i++){
j = str.indexOf(substr);
str1 = str.substring(j+1, str.length());
str = str1;
ch++;
}
return ch;
}
查找给定字符串中的子串  并返回个数 

解决方案 »

  1.   

    indexOf返回的是指定字符串中的值
      

  2.   

    这个可以帮助你统计了。哪不知道的再发了。希望能够帮助你。public class Test {
    public static void main(String[] args) {
    int a = calculate("This is a room", " ");
    System.out.println(a);
    int b = calculate("I am A teacher", "a");
    System.out.println(b);
    int c = calculate("This is a room", "is");
    System.out.println(c);
    int d = calculate("aaaa", "aa");
    System.out.println(d);
    } public static int calculate(String str, String substr) {
    String temp = str;
    int count = 0;
    int index = temp.indexOf(substr);
    while (index != -1) {
    temp = temp.substring(index + 1);
    index = temp.indexOf(substr);
    count++;
    }
    return count;
    }
    }
      

  3.   


    public class Test{
    public static void main(String[] args){
    int a = calculate("This is a room"," ");
    System.out.println(a);
    int b = calculate("I am A teacher","a");
    System.out.println(b);
    int c = calculate("This is a room","is");
    System.out.println(c);
    int d = calculate("aaaa","aa");
    System.out.println(d);
    } public static int calculate(String str,String substr){
    int ch = 0;
    int strlen = 0;
    int j = 0;

    strlen = substr.length();
    String str1;
    for(int i=0;i <=str.length();i++){
    j=0;
    j = str.indexOf(substr);
    if (j >= 0)
    {
    ch++;
    }
    str1 = str.substring(j+strlen, str.length());
    str = str1;
    }
    return ch;

    }
    运行结果:
    3
    2
    2
    2
      

  4.   

    最后一个怎么可能是 2 呢?
    "aaaa" 
    第1、2组成:aa
    第2、3组成:aa
    第3、4组成:aa 
    所以就是 3 个啦。    
      

  5.   

    我在你原有的基础上改动了下,你发现这个不和你所要结果相同时,可以用我下面加的那种方法调试下。
    我觉得2楼的方法不错,可以解决出界问题。还有length是算字符个数是从1开始的不是从0开始所以要减1.
    public class Test

    public static void main(String[] args)

    int a = calculate("This is a room"," "); 
    System.out.println(a); 
    int b = calculate("I am A teacher","a"); 
    System.out.println(b); 
    int c = calculate("This is a room","is"); 
    System.out.println(c); 
    int d = calculate("aaaa","aa"); 
    System.out.println(d); 
    }  public static int calculate(String str,String substr)

    int ch = 0; 
    int j = 0; 
    String str1; 
    for(int i=0;i <=str.length()-1;i++)


    j = str.indexOf(substr); //最小标索引值
    //System.out.println(j); 用这句你可以很清楚的看到为什么出现不是你想要的结果。
    str1 = str.substring(j+1, str.length()-1); //获取子字符串
    str = str1; 
    if(j!=-1)
    ch++; 

    return ch; 
    }