2012-03-10 63 views
0

該檢查需要確保文件中的所有行都從一個牆開始,並且最多隻有一個入口,最多隻有一個出口,並以牆結束。我分解了條件,以便測試它們。它失敗的CS = 「WWWW」, 「WXW」, 「WWWWWWWWRWWWWWW」Java正則表達式檢查迷宮中的有效字符

/** 
* 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 2012-03-10 02:28:08

+0

我正在檢查每行或字符序列以'W'開始,以'W'結尾並且在牆之間至多有一個'R'或最多一個'X'。 – user1275127 2012-03-10 02:35:04

回答

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字符串,以加倍反斜槓。另外,空間幾乎可以出現在任何地方這一事實導致我懷疑基於非正則表達式的函數也會很好。你總是可以循環遍歷序列,計算R和X,忽略空格,確保第一個和最後一個字符是W,並在你看到一個錯誤的字符或多餘的R或W時立即返回false

+0

好的,謝謝你會嘗試。空格的規則就是它可以包含0到多個空格。我意識到這並不能消除迷宮,因爲你可以創建一排所有的牆壁,但這是要求的,當發生類似事情時,迷宮的解算者負責給出反饋。 – user1275127 2012-03-10 02:37:33

+1

請原諒大量的編輯。我以爲我可以將它取而代之。我終於走出了Regexr並開始研究並測試它 - 希望足夠徹底。 :) – 2012-03-10 03:02:16

+0

哇,謝謝你的提示Regexr實際上很有幫助,我從來沒有聽說過它。對不起,這是我第一個學期的java。 – user1275127 2012-03-10 03:06:39

相關問題