Java Regex проверяет действительные символы для лабиринта - PullRequest
0 голосов
/ 10 марта 2012

Эта проверка должна гарантировать, что все строки в файле начинаются со стены и имеют максимум один вход, максимум один выход и заканчиваются стеной. Я разделил условия, чтобы проверить их. Сбой для cs = "WWWW", "WXW", "WWWWWWWWRWWWWWW"

/** 
 * Check to ensure all lines are only composed of walls, 
 * entrance, exit, and space
 */
protected boolean invalidMazeCharacters(CharSequence cs) {

    p = Pattern.compile("^W+(R??W*|X??|W*|\\s*W*)W+$");
    m = p.matcher(cs);
    if (!m.matches()) {
        return true;
    }
    return false;
}

1 Ответ

1 голос
/ 10 марта 2012

Попробуйте

^W+(R?W*X?|X?W*R?)W+$

Это не самый эффективный, но вы можете улучшить его. :) Кроме того, я не уверен, каковы ваши правила для пробелов ....

ДОПОЛНЕНИЕ

^W[W\s]*(?:R?[W\s]*X?|X?[W\s]*R?)[W\s]*W$

См. http://regexr.com? 309c6

Не забудьте, если вы используете строку Java, чтобы удвоить обратную косую черту.

Кроме того, тот факт, что пробелы могут появляться практически где угодно, заставляет меня подозревать, что функция, не основанная на регулярных выражениях, тоже подойдет. Вы всегда можете перебрать последовательность, подсчитав R и X, игнорируя пробелы, убедившись, что первый и последний символы - W, и возвращая false, как только вы видите плохой символ или лишние R или W.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...