此检查需要确保文件中的所有行都以墙开头,并且最多只有一个入口,最多一个出口,并以墙为结尾。我分开了条件,所以我可以测试它们。它失败了cs =“WWWW”,“WXW”,“WWWWWWWWWWWWWWWW”
/**
* 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;
}
答案 0 :(得分:1)
尝试
^W+(R?W*X?|X?W*R?)W+$
这不是最有效的,但你可以努力改进它。 :)另外,我不确定你的空间规则是什么......
附录
^W[W\s]*(?:R?[W\s]*X?|X?[W\s]*R?)[W\s]*W$
如果您使用的是Java字符串,请不要忘记将反斜杠加倍。
此外,空间几乎可以出现在任何地方的事实让我怀疑基于非正则表达式的函数也会很好。你总是可以遍历序列,计算Rs和Xs,忽略空格,确保第一个和最后一个字符是Ws,并在看到一个坏字符或额外的R或W时返回false
。