【问题标题】:Code with regex seems to end for no reason带有正则表达式的代码似乎无缘无故地结束
【发布时间】:2014-07-09 05:58:02
【问题描述】:

我写了一段代码来“编译”一个文件(主要是为了我自己的练习)。它首先将文件中的所有行加载到 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,但它没有帮助。

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

【问题讨论】:

  • “s”只是“interface {”,还是包含更多内容?

标签: java regex eclipse


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多