正则表达式和 Java I/O

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

了使用正则表达式在文件中搜寻匹配的一种方法。受 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]开始的单词


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值