我是个JAVA的初学者,这是我写的一个关键字搜索的程序,
import java.lang.String;
public class CompareString {
public String Keyword;//关键字
public String Text;//所要搜索的文本
public CompareString(String Keyword,String Text){
 this.Keyword=Keyword;
 this.Text=Text;
}
     public void Compare(){
      int i=0;//循环变量
      int sum=0;//计数器
      String FirstPartKeyword=Keyword.substring(0,1);//用substring()方法截取字符串
      String PartOfText=Text.substring(i,i+1);//同上
      for( i=0;i<Keyword.length();i++){
      if(FirstPartKeyword.equals(FirstPartKeyword)){
      String str=Text.substring(i,i+Keyword.length());//此处出现数组下标越界的异常
      if(str.equals(Keyword)){
      sum=sum+1;//如果if 语句为真,则计数一次
      }
      }//while结束
      }//for结束
if(sum>0){
System.out.println("有此内容");
System.out.println("共出现"+sum+"次");
}
else{System.out.println("无此内容");
}

     } public static void main(String[] args) {
CompareString q=new CompareString("1234567890","123");
q.Compare();
}}
经过调试,总是显示数组下标越界,我实在找不出解决的办法,怎样才能解决此问题,希望各位在此指点,小弟在此谢过!!!

解决方案 »

  1.   

    String   str=Text.substring(i,i+Keyword.length());//
    截取的长度 比 Text 都长 
      

  2.   

    package test;
    public   class   CompareString   { 
    public   String   Keyword;//关键字 
    public   String   Text;//所要搜索的文本 
    public   CompareString(String   Keyword,String   Text){ 
    this.Keyword=Keyword; 
    this.Text=Text; 

         public   void   Compare(){ 
              int   i=0;//循环变量 
              int   sum=0;//计数器 
              
              String   FirstPartKeyword=Keyword.substring(0,1);//用substring()方法截取字符串 
             
              String   PartOfText=Text.substring(i,i+1);//同上 
              
              for(i=0;i <=Text.length()-Keyword.length();i++){
               
               
               if(FirstPartKeyword.equals(FirstPartKeyword)){ 
               
             String   str=Text.substring(i,i+Keyword.length());//此处出现数组下标越界的异常 
            
              
                if(str.equals(Keyword)){ 
                sum=sum+1;//如果if   语句为真,则计数一次 
                } 
               }//while结束 
              }//for结束 
              if(sum> 0){ 
               System.out.println("有此内容"); 
               System.out.println("共出现"+sum+"次"); 
              }else{
               System.out.println("无此内容"); 
              }        }      public   static   void   main(String[]   args)   { 
          CompareString q=new CompareString("123","12312123"); 
          q.Compare(); 
         } } 
      

  3.   

    你说的问题调试一下就知道了啊
    "Keyword.length()"= 10
    你的test就3个数
    那是不可能的啊
    你想想从123里取0到10的位置的数怎么不能不报异常啊
      

  4.   


    import   java.lang.String; 
    public   class   CompareString   { 
    public   String   Keyword;//关键字 
    public   String   Text;//所要搜索的文本 
    public   CompareString(String   Keyword,String   Text){ 
      this.Keyword=Keyword; 
      this.Text=Text; 

              public   void   Compare(){ 
              int   i=0;//循环变量 
              int   sum=0;//计数器 
              String   FirstPartKeyword=Keyword.substring(0,1);//用substring()方法截取字符串 
              String   PartOfText=Text.substring(i,i+1);//同上 
              for(   i=0;i <Keyword.length();i++){ 
              if(FirstPartKeyword.equals(FirstPartKeyword)){ 
              String   str=Text.substring(i,i+Keyword.length());//此处出现数组下标越界的异常 
              if(str.equals(Keyword)){ 
              sum=sum+1;//如果if   语句为真,则计数一次 
              } 
              }//while结束 
              }//for结束 
    if(sum> 0){ 
    System.out.println("有此内容"); 
    System.out.println("共出现"+sum+"次"); 

    else{System.out.println("无此内容"); 
    }           } public   static   void   main(String[]   args)   { 
    CompareString   q=new   CompareString("1234567890","123"); 
    q.Compare(); 
    } } 
      

  5.   

     if(FirstPartKeyword.equals(FirstPartKeyword))  这个条件不是总为真吗?