我已经编写了一段代码来“编译”一个文件(主要是为了我自己的实践)。它首先将文件中的所有行加载到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
是要搜索的String
,lines[i + 1]
是下一行,我创建了一个记录器对象来记录编译。
在Eclipse中使用调试器,我发现当涉及到注释的行时,它会跳转到Pattern
类,然后停止。我的意思是它打开一个带有Pattern
类源的新选项卡,下一步它终止,没有给出任何逻辑推理或任何理由。
我的正则表达式有问题吗? (它尝试搜索这样的字符串:interface {
,else if
语句查找替代字符:
interface
{
我试图重新启动Eclipse,因为我认为可能存在问题,但它没有帮助。
如果需要更多代码,请发表评论告诉我。
答案 0 :(得分:3)
{
是一个需要转义的特殊元正则表达式字符。使用此正则表达式:
s.matches("\\s*interface\\s*\\{\\s*")