2016-02-26 25 views
-3

我使用java.util.Scanner中讀取文件和必須要找到對像:這是在java中的正則表達式是什麼?

設置鍵值

要跳過註釋以#開頭的, 必須跳過空白行, 它是一個txt文件:只有註釋,空白行和包含格式值的行:SET鍵值。 鍵沒有空格,值可以在「」中。

我面臨使用什麼正則表達式跳過行和註釋,或者如果我可以直接在掃描器中使用查找模式來查找關鍵值對的麻煩。我不擅長正則表達式,所以請幫助。 或者如果有更好的方法來做到這一點比掃描儀,請建議。

回答

0

不要試圖把它放在RE上,使用多個步驟。 假設你有行作爲String

  1. 修剪,除去開頭和結尾的空白。

  2. if line.length() == 0 or line.matches("#.*")跳過它。

  3. 使用line.substring(5, line.length())刪除前4個字符,爲了安全起見,您可以檢查它們是否等於「SET」。

  4. 使用line.indexof("\\s")找到第一空間,這就是你必須拆分的地方。

  5. 使用line.substring(...)來獲得密鑰和值。

+0

謝謝,我怎麼覺得如果行以#? line.matches(「#」)不起作用。 – MagicBeans

+0

@MagicBeans:抱歉,我的錯誤會編輯我的答案。 –

1

您可以使用正則表達式:

SET (\w*) ("?)(.*)\2 

它只會匹配你想要的,可以讓你直接提取字符串爲「鑰匙」作爲第一個捕獲組和串線爲'價值'(沒有引號)作爲第三個捕獲組。它還會提取'value'(如果有引號)和引用結尾之間的所有內容(如果沒有)。

正如在Java代碼中的字符串應該是這樣的:

"SET (\\w*) (\"?)(.*)\\2" 
+0

我如何在表達式中轉義? – MagicBeans

+0

@MagicBeans在引用之前的單個反斜槓應該足夠用於Java,它只是告訴它不要在那裏結束字符串,最後,完整的正則表達式字符串看起來像這樣:'' 「SET(\ w *)(\」?)(。*)\ 2「' – KMoschcau

+1

@KMoschcau:當你的正則表達式是一個在代碼中定義的字符串常量時,你當然也需要避免反斜槓: \ w *)(\\「?)(。*)\\ 2」' –