带有正则表达式的代码似乎没有任何理由结束

时间:2014-05-20 20:00:50

标签: java regex eclipse

我已经编写了一段代码来“编译”一个文件(主要是为了我自己的实践)。它首先将文件中的所有行加载到RAM中,然后读取文件。为了理解其中的内容,我使用了String.matches()String.contains()方法的正则表达式。现在我遇到了一个非常奇怪的问题,这是我以前从未遇到的问题:程序没有任何充分的理由结束。它不会给出错误或异常,或任何其他指示可能出错。

这是我正在谈论的部分:

else if (s.contains("interface")) {
    if (s.matches("\\s*interface\\s*{\\s*")) {  //The program seems to stop on this line
        logger.info("Found properties block opener on line " + (i + 1) + ": " + s);

    }
    else if (s.matches("\\s*interface\\s*")) {
        if (lines[i + 1].matches("\\s*{\\s*")) {
            logger.info("Found properties block opener on lines " + (i + 1) + " and " + (i + 2) + ": " + s);

        }

    }

}

s是要搜索的Stringlines[i + 1]是下一行,我创建了一个记录器对象来记录编译。

在Eclipse中使用调试器,我发现当涉及到注释的行时,它会跳转到Pattern类,然后停止。我的意思是它打开一个带有Pattern类源的新选项卡,下一步它终止,没有给出任何逻辑推理或任何理由。

我的正则表达式有问题吗? (它尝试搜索这样的字符串:interface {else if语句查找替代字符:

interface
{

我试图重新启动Eclipse,因为我认为可能存在问题,但它没有帮助。

如果需要更多代码,请发表评论告诉我。

1 个答案:

答案 0 :(得分:3)

{是一个需要转义的特殊元正则表达式字符。使用此正则表达式:

s.matches("\\s*interface\\s*\\{\\s*")