数据结构书上有现成的啊,有个算法,叫什么忘记了,效率是最高的。
做个双循环也是可以实现的,但效率不是最高的。
public Class A(){
    String a = "abcdeac";
    String b = "ac";    public static void main(String[] args){
    char[] charA = a.toCharArray();
    char[] charB = b.toCharArray();
    Boolean flag;
    int k;
    int j = 0;
    for(int i=0;i<=(charA.length-charB.length);i++){
        if(charA[i].equals(charB[0])){
            flag = true;
            k = i;
            j = 0;
            while(flag == true){
                i++;
                j++;
                if(charA[i].equals(charB[j])) flag = true;
                     else flag = false;
                if(j == charB[j].length) System.out.println(i);
                }
            }
        }
    } }没调试过,不知对否,呵呵

解决方案 »

  1.   

    class test
     {
      public static void main(String[] args)
      {
      char[] a ={'a','b','a','c','d'};
        char[] b={'a','c','d'};
        
        int flag;
        
        int lenA=String.valueOf(a).length();
        int lenB=String.valueOf(b).length();
       
        for(int i=0;i<lenA;i++)
    {
    flag=0;
    if(a[i]==b[0])
    {
    if(i==lenA-1)
        {
         flag=1;
            break;
        }
    for(int j=1;j<lenB;j++)
        {
            if(j>=lenA-i)
            {
                flag=1;
                break;
            }
               if(a[i+j]!=b[j])
               {
                   flag=1;
                   break;
               }
               
        }
        
        if(flag==0)
        {
         System.out.println(i);
         break;
        }
        
    }
        
    }

      }
        }请问面试什么职位?
      

  2.   

    楼上的你搞笑啊!!
    charA.length-charB.length
    j == charB[j].length
    SUN公司什么时候开发了这2个方法???
      

  3.   

    什么没有开发
    你去试试,不要乱说哈
    只不过第二句可能是他写错了,改为j == charB.length
      

  4.   

    我已经忘记 KMP 了, 但我有下载了JDK 源码, 所以,而且我认为它的效率肯定不赖. 看了源码后发现
      themaster(独孤行) 的跟源码中的很相似 ,只不过人家 后面的 while 只用了一个 For 语句. 不过作为程序员,基本语法问题出现,真是太不小心了, 会让人家看笑话的 .     *^_^*  .
      

  5.   

    themaster(独孤行) ( ) 的修改为这样可以实现 :
     
       public static void IndexOf(String a,String b){
    char[] charA = a.toCharArray();
        char[] charB = b.toCharArray();
        boolean flag;
        int k;
        int j = 0;
        for(int i=0;i<=(charA.length-charB.length);i++){
            if(charA[i] == charB[0]){
                flag = true;
                k = i;
                j = 0;
                while(flag == true){
                    k++;
                    j++;
                    if(charA[k] == charB[j]) flag = true;
                         else flag = false;
                    if(j == charB.length -1) { System.out.println(i); break;}
                    }
                }
            }
     }
      

  6.   

    模式匹配,数据接过的要算nextval的那种,呵呵
      

  7.   

    是啊,写错了,不好意思:)
    是KMP算法,效率比较高的,具体不记得了
      

  8.   

    char[] c = a.toCharArray();
            char[] bb = b.toCharArray();
            int k = 0;
            for (int i = 0, j = c.length; i < j -1; i++) {
                if (c[i] == bb[0] && c[i + 1] == bb[1]) {
                    k = i;
                }
            }
      

  9.   

    数组.length---->是属性
    String.length()---->才是方法
      

  10.   

    以下是我写的支持字符串替换的实现
    你的indexOf实现包含在里面,自己找public class Test 
    {
      public static void main(String []ars)
      {
        String str=new String("本.拉登");
        String match=".拉";
        String value="as";
        
        System.out.println("原字符串: "+str+"    "+"替换子串: "+match+"    "+"替换值: "+value);
    System.out.println("替换后值为: "+replace(str,match,value));
        
      
      }
      
      public static String replace(String str,String match,String value)
      {
        char[] arr_str=str.toCharArray();
        char[] arr_match=match.toCharArray();
        char[] arr_value=value.toCharArray();
        boolean flag=false;
        int len=arr_str.length-arr_match.length+arr_value.length;
        char[] newCharArr=null;
        int index=-1;
    int count=0;
        
        for(int i=0,k=0;i<arr_str.length&k<arr_match.length;++i,++k)
        {

          if((arr_str[i]==arr_match[k])&(!flag))
          {
     
    ++count;
            index=i;//记下下标
            flag=true;
          }
      else if((arr_str[i]==arr_match[k])&flag)
    {
      ++count;
    }      if(((arr_str[i])!=arr_match[k]))
          {
    count=0;
            flag=false;
            k=-1;
          }
          if(count==arr_match.length)//如果为真,则说明字符连续相等arr_match.length次,即arr_str中含有arr_match
          {
      
            newCharArr=new char[len];
            break;
          }
        }
        
        if(newCharArr==null)
          return null;
        


        for(int i=0;i<index;++i) //拷贝index前的串
        {
    newCharArr[i]=arr_str[i];


    }    for(int i=index,k=0;k<arr_value.length;++i,++k)//拷贝arr_value
        {
    newCharArr[i]=arr_value[k];

    }    for(int i=index+arr_value.length,k=index+arr_match.length;i<newCharArr.length;++i,++k)
        {
    newCharArr[i]=arr_str[k];

    }
        

        return new String(newCharArr);
        
      }
    }
      

  11.   

    public static int indexOf(String strSource,String strDestination)
        {
            char[] source = strSource.toCharArray();
            char[] destination = strDestination.toCharArray();
            char firstChar = destination[0];
            int length = source.length - destination.length;
            for(int i=0;i<length;)
            {
                if(source[i]!=firstChar)
                { 
                    i = i + 1;
                }
                else
                {               
                    for(int j=1;j<destination.length;j++)
                    {
                        if(source[i+j]==destination[j])
                        {
                            if(j==destination.length-1)
                                return i;
                        }
                        else
                        {
                            i = i + j;
                            break;
                        }
                    }
                }
            }
      
            return -1;
        }
      

  12.   

    看不到结果是怎样的?都运行不了呀~!我还不晓得哦~!那位大哥 把 最后 可以 运行的代码发给我好不~!谢拉~[email protected]