2013-12-08 71 views

回答

0
public static void main(String[] args) { 
    String input = "((~B V P) V M)^(B V ~P)^(B V ~M)"; 
    String result = input.replaceAll("[()]", "") 
         .replaceAll("\\^", ", "); 
    System.out.println(result); 
} 

輸出:

〜BVPVM,BV〜P,BV-M

我敢肯定有人會想出一些超級真棒正則表達式。與此同時,這就足夠了。

+0

在OP問題反正第一種情況是,爲什麼正則表達式是不是這個任務的好工具很好的例子。 – Pshemo

+0

事實上,它不能用於例如A ^((B))^(A^B => C)的情況...... – JudyJiang

2

看來你正在爲邏輯公式編寫解析器。這裏就是我想要做的:

  • 使用工具定義形式文法爲您的公式,並生成一個解析器如ANTLR
  • 使用您生成的解析器解析字符串並構造一個基於樹的數據結構來表示這些公式。
  • 遍歷樹並根據需要打印字符串。在你的情況下,這意味着將連詞變爲逗號,而不改變其他所有內容。
+0

實際上我希望存儲每個字符串並將它們用於進一步推斷..您的方法聽起來聰明但有點努力..b – JudyJiang

+0

你可以存儲字符串以作進一步的推理,這不是問題。如果你想推理公式,你需要把它們分解成它們各自的組件。一個邏輯公式是一個樹形結構,因此無論如何你需要做一些事情。語法/解析器部分也可以手動完成,但解析器生成器通常會更容易。 –

+0

而且..在這種情況下..什麼是形式語法? – JudyJiang

相關問題