黑马程序员技术交流社区

标题: 求整个字符串中某个字符串出现的次数 [打印本页]

作者: 吴刚—heima    时间: 2013-5-31 11:53
标题: 求整个字符串中某个字符串出现的次数
  1. class StringTestDemoTwo
  2. {

  3.         String str="wugangwugangwugangwugang";
  4.         String key="wu";
  5.        
  6.         int count=getKeyStringCount(str,key);
  7.         System.out.print(count);


  8.         public static int getKeyStringCount(String str,String key)
  9.         {

  10.            //定义计数器
  11.                 int count=0;
  12.        //定义初始位置
  13.                 int index=0;

  14.        while(index=str.indexOf(key)!=-1)
  15.                 {
  16.                    str=str.subString(index+key.length());
  17.                    count++;

  18.                 }
  19.                 return count;
  20.         }
  21. }
复制代码
童鞋们帮我看一下,为什么我这段代码总是会有错误,但是我把代码拷贝到eclipse中,按照它的提示修改的代码的时候,它就成功了,而修改后的代码为:
  1. class StringTestDemoTwo
  2. {
  3.        
  4.         public static void main(String[] args)
  5.         {
  6.                
  7.                 String str="wugangwugangwugangwugang";
  8.                 String key="wu";
  9.                
  10.                 int count=getKeyStringCount(str,key);
  11.                 System.out.print(count);

  12.         }

  13.         private static int getKeyStringCount(String str, String key) {

  14.                    //定义计数器
  15.                         int counts=0;
  16.              //定义初始位置
  17.                         int index=0;

  18.              while(str.indexOf(key)!=-1)
  19.                         {
  20.                        index=str.indexOf(key);
  21.                            str=str.substring(index+key.length());
  22.                            counts++;

  23.                         }
  24.                         return counts;
  25.         }
  26.        
  27. }
复制代码
特别是那个代码块中的getKeyStringCoune()这个方法这个地方,我上面的代码修饰符是public 怎么不行,怎么private它就能编译成功呢?
作者: 画饼    时间: 2013-5-31 12:26
class Z
{
        
        public static void main(String[] args)
        {
               
                String str="wugangwugangwugangwu";
                String key="gang";
               
                int count=getKeyStringCount(str,key);
                System.out.print(count);

        }

       public static int getKeyStringCount(String str, String key) {

                   //定义计数器
                 int counts=0;
             //定义初始位置
                        int index=0;

             while(str.indexOf(key)!=-1)
                   
                        {
                       index=str.indexOf(key);
                           str=str.substring(index+key.length());
                           counts++;

                        }
                        return counts;
        }
        
}

作者: w270307032    时间: 2013-5-31 12:26
这个和public 及private的关系不大,主要是你一些执行语句:String str="wugangwugangwugangwugang";
        String key="wu";
        
        int count=getKeyStringCount(str,key);
        System.out.print(count);
这些没放在主函数内的原因,我把你原来没经eclipse改过前的代码修改了下,getKeyStringCoune()这个代码块还是用你原来的public,没改,编译是能通过的,你可以再试下,然后看下我改动的地方。
  1. public class StringTestDemoTwo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args){
  6.                 String str="wugangwugangwugangwugang";
  7.             String key="wu";
  8.             
  9.             int count=getKeyStringCount(str,key);
  10.             System.out.print(count);

  11.         }
  12.         public  static int getKeyStringCount(String str,String key)
  13.     {

  14.        //定义计数器
  15.             int count=0;
  16.    //定义初始位置
  17.             int index=0;

  18.    while((index=str.indexOf(key))!=-1)
  19.             {
  20.                str=str.substring(index+key.length());
  21.                count++;

  22.             }
  23.             return count;
  24.     }
  25. }
复制代码

作者: 画饼    时间: 2013-5-31 12:27
定义静态方法的时候,要注意里面代码是否有未初始化的对象,因为静态方法是不需要new对象直接调用的。你上面那个代码,我试了一下,可以运行
作者: w270307032    时间: 2013-5-31 12:47
恩 是的 我主要是想回答楼主,代码编译不出来是public和private权限的原因,为了方便楼主对比,代码编译不过去主要问题所在,所以没有过多去修改和优化楼主的代码。
而4楼所说的那些,就是涉及到下一步了,那就是优化代码了,4楼说的很对,就是要注意看这个方法有没必要加静态,是否想让调用者直接通过类名调用。
还有我补充一点的是getKeyStringCoune()这个代码块,Eclicpse建立将public改为private原因就是,如果觉得这个方法没必要对外暴露,那就私有化起来。这就是Eclicpse建议改动原因

未命名.jpg (12.39 KB, 下载次数: 0)

未命名.jpg

作者: 十字路口    时间: 2013-6-1 23:14
String str="wugangwugangwugangwugang";

05.        String key="wu";

06.        

07.        int count=getKeyStringCount(str,key);

08.        System.out.print(count);
不能放在这个位置,这里可以定义类的成员变量和方法的,不可以定义执行语句。多学习java基础,多动手编程,这种错误就不会犯了,加油
以下是我帮楼主改的代码:class StringTestDemoTwo

{
      public static void main(String[] args) {
              String   str="wugangwugangwugangwugang";
          String   key="wu";
          System.out.println(getKeyStringCount(str, key));
         
        }

        public static int getKeyStringCount(String str,String key)
       {
        //定义计数器
      //定义初始位置
               int index=0;
              int count=0;
               System.out.print(count);
              while((index=str.indexOf(key))!=-1)
                {
                  str=str.substring(index+key.length());
                   count++;

                }
                return count;

        }

}
而且这个跟私有是没有关系的,你可以用私有也可以用公有的。。希望能帮助你。。
作者: 逝者轨迹    时间: 2013-6-2 09:41
public static void main(String[] args)
        {
                String str="wugangwugangwugangwugang";
                String key="wu";
                int count=getKeyStringCount(str,key);
                System.out.print(count);
        }
你的第一段代码没有主函数main却System.out.print(count);
我想这个才是主要问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2