扫描文件以查找模式

时间:2015-06-11 22:00:13

标签: java regex file java.util.scanner

我目前正在开发一个简单的解析程序,它从文件中读取某些模式,格式化它们,然后将它们写入输出文件。

输入文件如下所示

  

{0,0,0,0,0,0,0,0,0} {1,1,1,1,1,1,1,} {3,3,3,3,3,3 ,3,3,3,3}

数字的位数因块而异,也取决于数字本身 基本上是随机的。 所以我想扫描输入文件中的那些块。 这是我到目前为止所得到的:

Pattern block = Pattern.compile("(\\{.*\\})");
    while(scanner.hasNext(block)){
        System.out.println(scanner.next(block));
    }

但到目前为止,该程序甚至没有输入while声明。我不知道 如果我的模式错误或我正在使用扫描仪错误。

我如何处理这些块之间的空白?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在初始化Pattern之前,如果所有块在文件中都有空格,我认为这可能是一个可能的解决方案,它可以读取文件并将所有空格替换为“总计String

我的意思是,例如,如果您将文件中的块存储为String这样的(仅限于一行):

{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 } {1 ,1 ,1 ,1 ,1 ,1 ,1 ,} {3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 }

然后您可以阅读:

String test = scanner.nextLine();

现在您的String已包含所有块,您可以将" "替换为""。像这样:

test = test.replaceAll(" ","");

现在你可以将它打印在另一个文件中并读取第二个文件以获得没有空格的所有块。

我希望它会对你有所帮助!

答案 1 :(得分:0)

定义分隔符 - 标记之间的模式

scanner.useDelimiter("(?<=\\{)\\s*(?=\\{)");

然后简单地循环:

while (scanner.hasNext()) {
    String term = scanner.next();
    // term will look like "{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }"
}