为什么输入ahjdhfjka和jdhf时显示string out of index;而当第二个字符串输入是jdfhyui就可以正常运行呢?
package 最大字符串;
import java.util.*;
import java.math.*;
public class maxMatch {
    public static void main(String[] args) {
        String str="";
        String sumstr="";
        int i=0,j=0;
        Scanner reader=new Scanner(System.in);
        if(reader.hasNextLine())
            str=reader.nextLine();
        if(reader.hasNextLine())
            sumstr=reader.nextLine();//输入两个字符串
        String max="";
      for(i=0;i<str.length()-max.length();i++)
          for(j=0;j<sumstr.length()-max.length();j++)
              if(str.charAt(i)==sumstr.charAt(j))
              {
                  int t1=i;int t2=j;
                  while(str.charAt(t1)==sumstr.charAt(t2) && t1<str.length())
                  {
                      t1++;
                      t2++;
                  }
                  if(t1-i>max.length()) { max=str.substring(i,t1); }
              }
      System.out.println("最大子串:" + max);  
      System.out.println("最大子串长度:" + max.length()); 
    }
}
   

解决方案 »

  1.   

    while(str.charAt(t1)==sumstr.charAt(t2) && t1<str.length())
                      {
                          t1++;
                          t2++;
                      }
    这里你操作了t1 t2但是只判断了t1没有判断t2
      

  2.   

    str.charAt(t1)==sumstr.charAt(t2) 
    打个括号。
      

  3.   

    改了一下,利用indexOf()ackage 最大字符串;
    import java.util.*;
    import java.math.*;
    public class maxMatch {
        public static void main(String[] args) {
            String str="";
            String sumstr="";
            Scanner reader=new Scanner(System.in);
            if(reader.hasNextLine())
                str=reader.nextLine();
            if(reader.hasNextLine())
                sumstr=reader.nextLine();//输入两个字符串
            String max="";
            String temp=str.length()>sumstr.length()?sumstr:str;//找两串中短的那串
             String other = (temp==sumstr)?str:sumstr;//查出另一串
         //因为最大可能就是短的一串在长串全部找到,因此从短串中截取子串去长串中判断,从长到短的去截取,一旦存在就结束,未考虑多种长度一样的子串的情况
         //如:abcdhhedfg abcdedfg
            boolean find = false;
            for(int i=temp.length();i>0 && !find;i--)
            {
             for(int j=0;(j+i)<=temp.length();j++)
             {
             String t = temp.substring(j,j+i);
             if(other.indexOf(t)>-1)
             {
             max=t;
             find=true;
             break;
             }
             }
            }
            if(!find)
            {
             System.out.println("未找到子串!");
            }else
            {
             System.out.println("最大子串:" + max);  
                System.out.println("最大子串长度:" + max.length()); 
            }
        }
    }
      

  4.   

    只要改一下while就可以了while(str.charAt(t1)==sumstr.charAt(t2) && (t1<str.length()-1 && t2<sumstr.length()-1))
                      {
                          t1++;
                          t2++;
                          //System.out.println(t1+":"+t2);   用这条语句看看他们的值是多少  就可以知道为什么outofrange了
                      }
                      if(t1-i>max.length()) { max=str.substring(i,t1+1); }
      

  5.   

    代码while(str.charAt(t1)==sumstr.charAt(t2) && t1<str.length())有问题,对sumstr.charAt(t2)是否越界没有做出判断,而且需要把这些判断条件写在前面,要不照样发生异常,就起不到应有的判断作用了。
    上述代码改为:while(t2<sumstr.length() && t1<str.length()&& str.charAt(t1)==sumstr.charAt(t2))