不是有str1.indexOf(str2)吗?>=0即str1包含str2...

解决方案 »

  1.   

    你的思路是对的,程序是错的。
    程序的错误表现在两个方面,一个低级错误,一个考虑不周全的错误。
    低级错误是for(int b=0;b <str1.length()-1;b++)应该改为for(int b=0;b <str1.length();b++),即:public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("第一个字符串");
    String str1 = input.next();
    System.out.println("第二个字符串");
    String str2 = input.next();
    int counter = 0;
    for (int a = 0; a < str2.length(); a++) {
    if (str1.charAt(0) == str2.charAt(a)) {
    for (int b = 0; b < str1.length(); b++) {
    if (str1.charAt(b) == (str2.charAt(a + b))) {
    counter++;
    }
    }
    }
    }
    if (counter == str1.length()) {
    System.out.println(str1 + "包含在" + str2);
    }
    }
      

  2.   

    考虑不周全的错误表现在,整体的算法思路是正确的,在实现中,counter没有注意失配后归零,没有注意完全匹配后立即返回。
    即str1 = "abc",str2 = "aeabcd"的时候,第一个a匹配上,counter变成1,后续失配后没有归零。
    同样导致了str1="abc",str2="aeabdd"会认为包含;
    也会导致str1="abc",str2="eabcdabcd"会认为不包含。这个算法应该符合你的思路:public static void main(String[] args) {
    /*
    Scanner input = new Scanner(System.in);
    System.out.println("第一个字符串");
    String str1 = input.next();
    System.out.println("第二个字符串");
    String str2 = input.next();*/
    String str1 = "abc";
    String str2 = "aeabcd";
    for (int a = 0, counter = 0; a < str2.length(); a++, counter = 0) {
    if (str1.charAt(0) == str2.charAt(a)) {
    for (int b = 1; b < str1.length(); b++) {
    if (str1.charAt(b) == (str2.charAt(a + b))) {
    counter++;
    }
    }
    if (counter == str1.length() - 1) {
    System.out.println(str1 + "包含在" + str2);
    return;
    }
    }
    }
    }
      

  3.   

    另外字符串匹配的算法效率上如果讲究的话,有一种叫KMP的算法比较快,父串指针失配后无需回朔。
      

  4.   

    KMP算法是本科《算法与数据结构》课教材中的内容,如果教材里涉及了字符串匹配,那绝对有KMP算法。你也可以baidu一下。我看的是清华大学出版社出的严蔚敏写的那本经典教材
      

  5.   

    参考下api中方法的源代码,就知道自己写的程序的缺陷了
      

  6.   

    另外我还有个问题程序中这句话str1.charAt(0)==str2.charAt(a))如果写成
    str1.charAt(0).equals(str2.charAt(a)))会报错  可是equals不也是判断俩个字符是否相等的吗
      

  7.   

    很多方法都可以实现,多查API,多用就好了!
      

  8.   

    提个小问题,什么叫面向对象。
    面向对象就是不要把算法写在 main 函数里。
    你的算法还有点可以优化下,如 if(str1.length() > str2.length())   return false;
          if (str1.charAt(0)==str2.charAt(a)  ){
              if( str1.length() > str2.length()- a)  return false;
          }
      

  9.   

    正则表达式正解:
    String str1 = "abc";
    String str2 = "aeabcd";
    Pattern pattern = Pattern.compile(str1);
    Matcher matcher = pattern.matcher(str2); 
    //当找到时,输出。
    while(matcher.find()){
    System.out.println(matcher.group());
    }
      

  10.   


    正则在这里貌似不使用,如果str1="*ab" str2="adcdab",这样就不适用了
      

  11.   

    str1.charAt(0).equals(str2.charAt(a)))会报错?
      

  12.   

    恩,不是会报错,是根本就没有这个方法。因为你的str1.charAt(0)是int类型的,意思是“ 返回指定索引处的 char 值”,int变量是没有equals方法的,如果你的变量时string,则必须用equals方法比较而不能用==比较
      

  13.   

    char 是基本数据类型,它不是Object,所有它没有方法