ちょっと借りますね
public class DiceTray {
    private int row;
    private int col;
    private char[][] gameboard;
    private char[][] work;
    
    public DiceTray(char[][] array) {
        row = array.length;
        col = array[0].length;
        gameboard = array;
        work = new char[row][col];
    }
    
    public static void main(String[] args) {
        
        char[][] map = {
            {'A', 'B', 'C', 'D'},
            {'E', 'F', 'G', 'H'},
            {'I', 'J', 'K', 'L'},
            {'M', 'N', 'O', 'P'}
        };
        
        // 対象文字列です。この文字をchar型配列mapから検索します
        String target = "AFKP";
        
        DiceTray app = new DiceTray(map);
        System.out.println(app.stringFound(target));
    }
    
    public boolean stringFound(String search) {
    
        boolean blt = true;
        int nowRow = 0;
        int nowCol= 0;
        // charValueArgsの配列数です
        int charValueArgsLength = search.length();
        // searchの文字数と同数の配列数を初期化します 
        char[] charValueArgs = new char[charValueArgsLength];
        // 紛らわしいので,配列数変数と対象文字列数変数を別々に分けます
        int searchLength = charValueArgsLength - 1;
        
        // String型のsearchをchar型の配列に変換
        search.getChars(0, searchLength, charValueArgs, 0);
        
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (gameboard[i][j] == charValueArgs[0]) {
                    nowRow = i;
                    nowCol = j;
                    break;      
                } else {
                    blt = false;
                }
            }
        }
        
        work[nowRow][nowCol] = charValueArgs[0];
        
        // charValueArgs[1]から検索開始
        for (int i = 1; i <= searchLength; i++) {
            
            for (int j = (nowRow - 1); j <= (nowRow + 1); j++) {
                
                for (int k = (nowCol - 1); k <= (nowCol + 1); k++) {
                    
                    if ((j < 0) || (j >= row) || (0 > k) || (k >= col)) {
                        continue;
                    } else if (charValueArgs[i] == gameboard[j][k]) {
                        blt = true;
                        nowRow = j;
                        nowCol = k;
                        work[nowRow][nowCol] = charValueArgs[i];
                        break;
                        
                    } else {
                        blt = false;
                    }
                }
                // 文字合致判定がtrueで,かつ対象文字列を検索し終えていたらreturn
                if ((blt == true) && (i == searchLength)) {
                    return blt;
                }
            }
        }
        for (int i = 0; i < row; i++) { // 配列の中身をクリア
            for (int j = 0; j < col; j++) {
                work[i][j] = ' ';
            }
        }
    return blt;
    }
} read.php ver2.4 2005/04/13