2016-02-26 74 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”' –