`

[原]装饰模式3-Grep

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,decorator,装饰模式,Unix
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:


package pattern.decorator.grep;

import java.io.*;

/**
 * 装饰模式(Decorator Pattern):Grep
 *
 * Grep是UNIX中的命令,
 * 使用命令"grep BMW file",
 * 就可以在file中找出含有BMW的行,并显示。
 *
 * @version 2009-6-6
 * @author Winty(wintys@gmail.com)
 */
public class Grep{
    public static void main(String[] args)throws Exception{
        GrepView view = new GrepView();

        if(args.length < 2){
            view.println("Usage: java Grep targetString fileName");
            view.println("e.g.:java Grep BMW C:/sample.txt");
            System.exit(0);
        }
        
        GrepReader grep;

        FileReader file = new FileReader(args[1]);
        grep = new GrepReader(file , args[0] , view);
        grep.search();
    }
}

class GrepReader extends FilterReader{
    private LineNumberReader reader;
    private String target;
    private GrepView view;

    /**
     *@param in 在输入流in中查找目标字符串
     *@param target 要查找的目标字符串
     *@param view 查找结果输出
     */
    public GrepReader(Reader in , String target , GrepView view){
        super(in);
        reader = new LineNumberReader(in);
        this.target = target;
        this.view = view;
    }

    public void search()throws Exception{
        String line = null;
        while((line = reader.readLine())!=null){
            int index = -1;
            if((index = line.indexOf(target)) != -1){
                String str;
                str = "line" + reader.getLineNumber() + " column" + (index +1) +":" + line;
                view.println(str);
            }
        }

        reader.close();
    }
}

class GrepView{
    private PrintStream out;

    public GrepView(){
        this.out = System.out;
    }

    public void println(String str){
        out.println(str);
    }
}
  • 大小: 55.9 KB
分享到:
评论

相关推荐

    前端开源库-fs-grep

    3. **正则表达式支持**:除了简单的字符串匹配,`fs-grep`还支持正则表达式,增强了搜索的灵活性和精确性。 4. **异步处理**:考虑到前端环境的非阻塞特性,`fs-grep`采用异步方式读取和处理文件,不会阻塞UI线程。 ...

    开源项目-bettinson-grep-webpage.zip

    开源项目-bettinson-grep-webpage.zip,I'm a complete go beginner and I wrote a simple grep function for web pages in go. How does this look?

    grep用法详解---grep与正则表达式

    `grep`命令用于在文件中查找匹配特定模式的行。基本语法为`grep [-选项] '搜索内容串' 文件名`。以下是一些常用选项: - `-a`:将二进制文件当作文本处理。 - `-c`:计算匹配行的数量。 - `-i`:忽略大小写。 -...

    linux-grep-命令-详解.zip

    这个压缩包“linux-grep-命令-详解.zip”包含了一份详细文档“linux-grep-基本用法及高级技巧.doc”,将深入解析grep命令的各个方面。下面,我们将根据文档内容,对grep命令进行详细介绍。 grep,顾名思义,“g/re/...

    windows-cmd-linux-grep等命令扩充

    它的基本语法是`grep [选项] 模式 [文件]`,其中选项可以设定搜索行为,如 `-i` 忽略大小写,`-v` 反向匹配,`-r` 递归搜索目录等。模式可以是简单的字符串,正则表达式,或者使用`-E`选项的扩展正则表达式。掌握...

    Linux 基础 39-文件内容命令-04-grep行首/行尾的模式查找.flv

    Linux 基础 39-文件内容命令-04-grep行首/行尾的模式查找.flv

    Linux教程-linux-文本处理-grep.docx

    * ifconfig | grep -E '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}':从 ifconfig 命令的输出中搜索包含 IP 地址的行 * ifconfig | grep -E '([0-9]{1,3}.){3}[0-9]{1,3}':从 ifconfig 命令的输出中搜索包含 IP ...

    VIM编辑器-head-trail-find-grep命令.txt

    VIM编辑器-head命令-trail命令-find命令-grep命令的介绍和说明。

    Linux- 系统随你玩之-grep查找文件内容-fyydlz.zip

    `grep`命令就是这样一个强大的工具,它能帮助我们快速定位文本文件中的特定字符串或模式。本资源“Linux-系统随你玩之-grep查找文件内容-fyydlz.zip”包含了关于如何使用`grep`进行文本搜索的示例文件——fyydlz.txt...

    Linux 基础 38-文件内容命令-03-grep查找文件内容.flv

    Linux 基础 38-文件内容命令-03-grep查找文件内容.flv

    Python-hackersgrephackersgrep作为实用程序专注搜索PE可执行文件的指定字符串包含输入输出调试符号

    `hackers-grep-master`压缩包包含了`hackers-grep`的源代码,通过阅读和学习源码,开发者可以深入理解PE文件的结构和Python处理这类文件的方法。这对于提升逆向工程和软件分析的技能非常有益。 总的来说,`hackers-...

    Linux运维-操作系统 教程 从入门到精通101课-75-77三剑客-grep.mp4

    Linux运维-操作系统 教程 从入门到精通101课-75-77三剑客-grep.mp4

    Go-vimgrep命令类似于vim的:vimgrep行为

    在Go语言的开发环境中,有时候我们可能需要对多个文件进行搜索和查找特定的代码模式,这时,`Go-vimgrep`命令就派上了用场。它模仿了Vim编辑器中的`:vimgrep`功能,使得在代码库中进行全局搜索变得更加高效和便捷。 ...

    x-git-grep:多个仓库中的 git grep

    `git grep`是Git内置的一个强大功能,用于在项目源码中搜索匹配特定模式的文本。而`x-git-grep`则将这一功能扩展到了多仓库场景,它能够同时在多个独立的Git仓库中进行全文本搜索,省去了逐个仓库操作的繁琐步骤。这...

    linux-grep

    3. **查找包含至少5个连续小写字符的行**:`grep '[a-z]{5}' aa` 4. **使用记忆组匹配模式**:`grep 'w(es)t.*\1' aa` #### 复杂实例解析 Grep不仅适用于简单的文本搜索,还能应对复杂的搜索场景。例如,在 `/usr/...

    phi-grep:elisp中的交互式可编辑递归grep实现

    phi-grep.el Elisp実装の编集可能な再帰grep ... phi-grep-dird-dwim 自动选择以上其中一项 在phi-grep结果缓冲区中,您还可以执行递归grep。 phi-grep-递归 当前结果文件中的grep 您可以使用[Cg]或[RET]

    grep-2.5.4-setup windows操作系统最新版

    为了满足这部分用户的需求,出现了"grep-2.5.4-setup",这是一个专为Windows设计的grep版本,使得在Windows环境下也能享受到类似Linux的grep功能。 grep-2.5.4-setup.exe是这个Windows版本的安装程序,用户可以通过...

    linuxgrep命令.pdf

    3. grep的正则表达式 grep支持Perl兼容的正则表达式(PCRE),可以通过正则表达式来指定复杂的搜索模式。例如: - ^:表示行的开头。 - $:表示行的结尾。 - .:匹配任何单个字符。 - *:匹配前一个字符零次或多次。...

    查找可用的 JDK 版本: 执行命令 yum search java-grep jdk

    查找可用的 JDK 版本: 执行命令 yum search java-grep jdk

    文本处理工具三剑客之---grep (正则表达式引擎,正则表达式元字符).md

    grep -A 3 "UUID" /etc/fstab ``` 这将显示每个匹配行及其后的三行上下文。 **小结:** `grep`结合正则表达式的使用,为文本搜索提供了强大的功能。无论是简单还是复杂的模式匹配需求,`grep`都能轻松应对。通过...

Global site tag (gtag.js) - Google Analytics