正则表达式和 Java I/O

来源:互联网 发布:路飞 知乎 编辑:程序博客网 时间:2024/05/18 00:42

到目前为止,展示的大多数例子中,正则表达式都是应用于静态字符串的。下面的例子展示

了使用正则表达式在文件中搜寻匹配的一种方法。受 Unix 的 grep 的启发,JGrep.java

接受两个参数:一个文件名及我们想要匹配的正则表达式。输出结果显示发生匹配的所有行

以及在行内的匹配位置。

 

//:c12:JGrep.java

// A very simpleversion of the "grep" program.

// {Args:JGrep.java "\\b[Ssct]\\w+"}

importjava.io.*;

importjava.util.regex.*;

importjava.util.*;

importcom.bruceeckel.util.*;

 

public classJGrep {

    public static void main(String[] args)throws Exception {

    if(args.length < 2) {

      System.out.println("Usage: javaJGrep file regex");

            System.exit(0);

        }

    Pattern p = Pattern.compile(args[1]);

        // Iterate through the lines of theinput file:

    ListIterator it = newTextFile(args[0]).listIterator();

    while(it.hasNext()) {

      Matcher m = p.matcher((String)it.next());

      while(m.find())

        System.out.println(it.nextIndex() +": " +

          m.group() + ": " +m.start());

        }

    }

} ///:~

 

在上例中,文件被作为一个 TextFile 对象(在本章前面已经介绍过)打开。由于一个 TextFile

对象内部的ArrayList 包含了文件中的行,由这个数组可以产生一个 ListIterator。因此,

其结果是一个可以让我们在文件的行之间进行移动(向前向后)的迭代器。

 

每个输入行都被用来产生一个 Matcher,并可以用 find()浏览结果。注意

ListIterator.nextIndex()用于跟踪行号。

测试参数打开 JGrep.java 文件,将其读入作为输入,然后搜索以[Ssct]开始的单词


原创粉丝点击