如何实现KMP算法的每一步匹配过程,即匹配了几次,字符串比较了几次

package myString01;
public class KMPDemo {

public static void main(String[] args) {
    String target=new String("aabcbabcaabcaababc"),pattern=new String("abcaababc");
    System.out.println("KMP"+"("+target+","+pattern+")"+"="+KMP(target,pattern));

    
}
public static int KMP(String target,String pattern) {
    return KMP(target,pattern,0);
}
public static int KMP(String target,String pattern,int begin) {
    int n=target.length(),m=pattern.length();
    if(begin<0)
        begin=0;
    if(n==0||n<m||begin>=n)
        return -1;
    int[]next = getNext(pattern);
    int i=begin,j=0;                 //i,j分别为目标串,模式串比较字符下标
    while(i<n&&j<m) {
        
        if(j==-1||target.charAt(i)==pattern.charAt(j)) {//若当前两字符相等,则继续比较后续字符
            System.out.println("target"+i+"="+"pattern"+j);
            i++;
            j++;
            
        }else {                         //否则,下次匹配,目标串下标i不回溯
            //System.out.println("target"+i+"="+"pattern"+next[j]);
            j=next[j];                             //模式串下标j退回到下次比较字符序号
            
            if(n-i+1<m-j+1)                         //若目标串剩余子串的长度不够,不再比较
                break;
        }
}
    if(j==m)
        return i-j;
    return -1;
    
    }

private static int[] getNext(String pattern) {  //返回模式串的的next数组
    int j=0,k=-1,next[]=new int[pattern.length()];
    
    next[0]=-1;
    while(j<pattern.length()-1)
        if(k==-1||pattern.charAt(j)==pattern.charAt(k)) {
            
            j++;
            k++;
            if(pattern.charAt(j)!=pattern.charAt(k)) {
                System.out.println("t"+j+"!="+"p"+k);
                next[j]=k;
               
            }else next[j]=next[k];
        }
        else k=next[k];
    return next;
}

}

img