2012-03-10 9 views
0

このチェックでは、ファイルのすべての行が壁で始まり、最大で1つの入口、最大で1つの出口、壁で終わるようにする必要があります。私は条件を分けてテストすることができます。これは、CS = "WWWW"、 "WXW" のために失敗し、 "WWWWWWWWRWWWWWW"Java Regexが迷路の有効な文字を確認する

/** 
* 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

**あなたは?** – Ryan

+0

をチェックしています。各行または文字列が 'W'で始まり、 'W'で終わり、 'R'または最大でも1つの 'X'が壁の間にあるかどうかを調べています。 – user1275127

答えて

1

は、それが最も効率的ではありませんが、あなたはそれを改善する上で動作することができ

^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を使用している場合

は、忘れてはいけない 文字列、バックスラッシュを倍にする

また、スペースがほとんどどこにでも現れるという事実は、正規表現以外の関数もちょうどいいと思うようになります。最初の文字と最後の文字がWであることを確認し、不適切な文字や余分なRまたはWが表示されるとすぐにfalseを返すように、シーケンスを繰り返し、RsとXsを数えたり、スペースを無視したりすることができます。

+0

よろしくお願いいたします。スペースの規則は、複数のスペースに0を含めることができるということだけです。私はあなたがすべての壁の行を作成することができるので、これは迷路を衛生的ではないことがわかっていますが、これは尋ねられるものであり、迷路のソルバーはそのようなときにそのフィードバックを与える責任があります。 – user1275127

+1

大量の編集を行いません。私はちょうどそれを翼できると思った。私は最終的にRegexrを取り出し、それに取り組み、それをテストしました - うまくいけば十分に十分です。 :) –

+0

ワウ、チップRegexrのおかげで本当に私はそれを聞いたことがない実際に非常に有用です。申し訳ありません、これは私の最初の学期です。 – user1275127

関連する問題