- 浏览: 66317 次
- 性别:
- 来自: 深圳
最新评论
-
蓝月儿:
fLineHeight蓝月儿 写道学习 学习 ,在学习屏幕适配 ...
Android获取字体高度和设置行高 -
蓝月儿:
学习 学习 ,在学习屏幕适配中,很感激
Android获取字体高度和设置行高 -
Will.Du:
查了半天,还是你这个方法最靠谱
Android TextView中设定个别文字字体显示格式
在使用swing的程序中经常用到JFileChooser,并且经常需要自定义一个FileFilter的子类来在文件列表中屏蔽不需要的文件。
大多数情况下,该子类是这样设计的:
这段代码取自sun公司的"Java Tutorial". 正象你所看到的,accept(File file)方法决定一个文件是否显示,如果返回值为true,则显示,反之,屏蔽。
麻烦的是如果你要使用多项文件类型选择,比如在EditPluse里,你可以选择打开*.txt, *.cpp, *.java等文件。为了这类需求,你不得不一个一个为不同的文件选择设计不同的FileFilter。有没有更方便的方法来实现FileFilter呢?我设计了一个工具类可以解决这个问题,使用它,几行代码就可以完成一个JFileChooser的设计:
仅仅是这几行代码就实现了第一个程序的功能,另外,还增加了一个选择cpp文件的功能和一个选择以exam开头的cpp文件或以exam开头的后跟一个字符的.h文件。下面,我将把我的设计介绍个大家。
从jsdk1.4开始,在java.util.regex出现了一个新的java类Pattern。Pattern是一个编译了的正则表达式的。它有很强大的功能,在这里我只使用其中一点点。在Pattern类中有一个方法matches(String regex, CharSequence input)可以判断是否一个input可以与一个regex相符合。"regex"是"regular expression"的缩写, 一个正则表达式是一个字符串模型, 和Windows中文件名模型一样, 比如, "*.exe" 就是一个可以包括所有可执行文件的文件名模型。
到这里,你会猜到我要做什么了。首先,我介绍几个程序中用到的regex的特征。
在一个regex中,字符"."代表任何一个字符,".*"代表零个或多个字符,".{n}"代表n个任意字符。我们可以作一个测试。
上面代码中,args[0]是一个你提供的regex,args[1]是一个待判定的字符串,如果该字符串与regex相符,程序将打印True,否则,false。通过提供不同的运行参数并查看运行结果,可以帮助你了解regex。
我们知道,在windows文件名模型中"?"代表一个字符,与regex中的".{1}"相对应;"*"代表0个或多个字符,与regex中的".*"相对应。如果一个字符串中包含"????",那么,对应的,我们可以在regex中使用".{4}"与之匹配。最后一个重要的事情是对于字符".",regex应该使用"[.]"与之对应。
好了,事情结束了,正象你所猜测的,我的设计的核心是把windows的文件名模型转换成regex,然后使用这个regex来决定那些文件可以显示,那些文件不显示。下面列出所有代码。
http://blog.csdn.net/unagain/archive/2006/03/20/630233.aspx?Pending=true
大多数情况下,该子类是这样设计的:
public ImgFileFilter extends FileFilter{ public boolean accept(File f) { if (f.isDirectory()) { return true; } // Utils is a user custom utility class, getExtension // is used to return the extension of a file. String extension = Utils.getExtension(f); if (extension != null) { if (extension.equals(Utils.tiff) || extension.equals(Utils.tif) || extension.equals(Utils.gif) || extension.equals(Utils.jpeg) || extension.equals(Utils.jpg) || extension.equals(Utils.png)) { return true; } else { return false; } } return false; } public boolean getDescription(){ return "Image Files."; } }
这段代码取自sun公司的"Java Tutorial". 正象你所看到的,accept(File file)方法决定一个文件是否显示,如果返回值为true,则显示,反之,屏蔽。
麻烦的是如果你要使用多项文件类型选择,比如在EditPluse里,你可以选择打开*.txt, *.cpp, *.java等文件。为了这类需求,你不得不一个一个为不同的文件选择设计不同的FileFilter。有没有更方便的方法来实现FileFilter呢?我设计了一个工具类可以解决这个问题,使用它,几行代码就可以完成一个JFileChooser的设计:
JFileChooser chooser = new JFileChooser(); FileFilterBuilder builder = FileFilterBuilder.newInstance(). chooser.setFileFilter( builder.createFileFilter( "*.tiff;*.tif;*.gif;*.jpeg;*.jpg;*.png" ,"Image Files(*.tiff;*.tif;*.gif;*.jpeg;*.jpg;*.png)")); chooser.setFileFilter( builder.createFileFilter( "*.cpp;*.h", "Cpp Files(*.cpp;*.h)")); chooser.setFileFilter( builder.createFileFilter( "exam*.cpp;exam?.h", "example Files(*.cpp;*.h)")); chooser.showOpenDialog(null);
仅仅是这几行代码就实现了第一个程序的功能,另外,还增加了一个选择cpp文件的功能和一个选择以exam开头的cpp文件或以exam开头的后跟一个字符的.h文件。下面,我将把我的设计介绍个大家。
从jsdk1.4开始,在java.util.regex出现了一个新的java类Pattern。Pattern是一个编译了的正则表达式的。它有很强大的功能,在这里我只使用其中一点点。在Pattern类中有一个方法matches(String regex, CharSequence input)可以判断是否一个input可以与一个regex相符合。"regex"是"regular expression"的缩写, 一个正则表达式是一个字符串模型, 和Windows中文件名模型一样, 比如, "*.exe" 就是一个可以包括所有可执行文件的文件名模型。
到这里,你会猜到我要做什么了。首先,我介绍几个程序中用到的regex的特征。
在一个regex中,字符"."代表任何一个字符,".*"代表零个或多个字符,".{n}"代表n个任意字符。我们可以作一个测试。
import java.util.regex.Pattern; public class TestRegex { public static void main(String[] args) { String regex, input; regex = args[0]; input = args[1]; boolean isMatch = Pattern.matches(regex, input); System.out.println(isMatch); } }
上面代码中,args[0]是一个你提供的regex,args[1]是一个待判定的字符串,如果该字符串与regex相符,程序将打印True,否则,false。通过提供不同的运行参数并查看运行结果,可以帮助你了解regex。
我们知道,在windows文件名模型中"?"代表一个字符,与regex中的".{1}"相对应;"*"代表0个或多个字符,与regex中的".*"相对应。如果一个字符串中包含"????",那么,对应的,我们可以在regex中使用".{4}"与之匹配。最后一个重要的事情是对于字符".",regex应该使用"[.]"与之对应。
好了,事情结束了,正象你所猜测的,我的设计的核心是把windows的文件名模型转换成regex,然后使用这个regex来决定那些文件可以显示,那些文件不显示。下面列出所有代码。
/* * @(#)FileFilterBuilder.java 1.0 06/01/03 * @author Unagain */ package je14tut.dom; import java.io.File; import java.util.regex.Pattern; import javax.swing.filechooser.FileFilter; /** * The <code>FileFilterBuilder</code> class is a singleton, it can create * a appropriate <code>FilterFilter</code> object for a <code>JFileChooser</code> object * in your code, rather than to write a subclass of FileFilter manually. * <p> * You can use <code>newInstance</code> to obtain the only instance, and use * <code>createFileFilter</code> to get the <code>FileFilter</code>. * * @author Jason * */ public class FileFilterBuilder { static FileFilterBuilder INSTANCE; static final int NAME = 0; static final int EXT = 1; private FileFilterBuilder() {} /** * create and get the singleton instance. * @return FileterBuilder. */ public static FileFilterBuilder newInstance() { if (INSTANCE == null) { INSTANCE = new FileFilterBuilder(); } return INSTANCE; } /** * The only functional method in this class so far, used to create a appropriate * <code>FileFilter</code> instance you perferred based on a windows system file pattern * you given. * * @param winFilePattern - A window system file pattern, such as "*.java", "new*.*", * "ex?mp*.exe", etc. * <blockquote>you can specified two or more pattern once, split each other with ";", for example * "*.java;*.html", etc. </blockquote> * @param description * @return */ public FileFilter createFileFilter(String winFilePattern, final String description) { final String pattern = PatternBuilder.createFileRegex(winFilePattern); FileFilter filter = new FileFilter() { public boolean accept(File f) { if (f.isDirectory()) { return true; } return Pattern.matches(pattern, f.getName().toLowerCase()); } public String getDescription() { return description; } }; return filter; } } /** * <code>PatternBuilder</code> has only one methoes so far, it just as a translator to convert a * windows system file pattern to a java regular expression for <code>FileFilterBuiolder</code>. * In fact it is more power than FileFilter needed, for Considering possibly usage in future, I * separate it from <code>FileFilterBuiolder</code>. * @author Jason */ class PatternBuilder { private PatternBuilder() {} public static String createFileRegex(String filePattern) { StringBuffer regex = new StringBuffer(); boolean lastIsQueMark = false; int queMarkCount = 0; filePattern = filePattern.toLowerCase(); for (int i=0; i<filePattern.length(); i++) { char chr = filePattern.charAt(i); if (chr == '?') { if (!lastIsQueMark) { regex.append(".{"); lastIsQueMark = true; } queMarkCount ++; } else { if (lastIsQueMark) { regex.append(queMarkCount); regex.append("}"); queMarkCount = 0; lastIsQueMark = false; } switch(chr){ case '*': regex.append(".*"); break; case '.': regex.append("[.]"); break; case ';': regex.append("|"); break; default: regex.append(chr); } } } return regex.toString(); } }
http://blog.csdn.net/unagain/archive/2006/03/20/630233.aspx?Pending=true
2010-11-30-09-39
发表评论
-
Android提高应用篇之模拟信号示波器(转)
2011-01-04 13:48 2015本文结合SurfaceView实现一个Android版 ... -
How to install sun-java5-jdk on Ubuntu 9.10
2010-12-16 09:52 1217ReMark from http://www.zooyoo.o ... -
tar和gzip、unzip命令详解(转)
2010-12-08 14:17 962tar和gzip、unzip命令详解 tar命令 ... -
ubuntu更新的几种命令
2010-12-08 14:15 1666ubuntu更新的几种命令 1.列举本地更新 sudo ap ... -
【zz】Linux启动过程中硬件模块的加载
2010-12-07 21:45 1701文章来源不详。 阅读Linux内核启动代码的直接动力 ... -
android源码的编译(转)
2010-12-07 21:41 1237/** 版本:1.0 日期:2009-03-18 作者:HKj ... -
获取Android手机上的图片和视频缩略图
2010-12-05 20:41 2576大家都知道Android从1.5开始刚插入SD卡时系统 ... -
Android 获取图片固定大小的缩略图
2010-11-29 17:04 2278在开发图片浏览器等软 ... -
Android Linux 开发环境搭建(转)
2010-11-29 16:55 2482最近一段时间开始了Android源代码研究,陆续将最近的一些经 ... -
Android应用程序的快速启动是怎样炼成的?(转)
2010-11-12 16:05 1299Android系统框架和 ... -
java中四种操作xml方式的比较(转)
2010-11-12 15:43 857java中四种操作xml方式的 ... -
GBK_TO_UTF8 程序实现方式
2010-10-18 16:50 1597网络上面有提到GBK向UTF8转换的实现方式,但是尝试 ... -
Android MediaPlayer指定文件位置播放
2010-10-18 16:42 5293工作性质原因对声音数据的操作主要是针对文件或者数据库内部的内容 ... -
Android TextView中设定个别文字字体显示格式
2010-10-11 09:28 4648用Html来格式化字符,例如要实现如下的显示: "这 ... -
Android获取字体高度和设置行高
2010-10-10 16:54 29124网络中好多资料介绍获取字体高度的方法如下: publi ... -
Android获取机器显示屏幕的分辨率
2010-10-10 13:59 2218Android获取机器显示屏幕的分辨率 import and ... -
Android实现全屏的方法
2010-10-10 13:19 1154Android中实现全屏的方法 Android里面实现全屏的 ...
相关推荐
在这个特定的案例中,我们关注的是`regex`类,它是C++ `<regex>`库的一部分,用于实现正则表达式操作。这个压缩包文件包含了一个名为`regex.h`的头文件,以及`release`和`debug`两个目录,这通常意味着它提供了编译...
在C++环境中,可能会利用C++的类和对象来封装这些C风格的函数,提供更加面向对象的接口,使得使用正则表达式更加方便和直观。 在标签"regex"中,我们也可以理解为这是关于正则表达式操作的代码示例或库。正则表达式...
在Visual Studio 2010环境下,我们可以使用`regex.h`头文件来引入PCRE(Perl Compatible Regular Expressions)库,从而实现正则表达式的匹配和操作。以下是对这个主题的详细讲解: 1. **PCRE库介绍** PCRE是一个...
在使用RegEX Tester时,首先需要了解的是正则表达式的语法。正则表达式由一系列特殊字符和普通字符组成,这些字符组合在一起定义了一个模式,用于匹配字符串。例如,"."代表任意单个字符,"\d"代表数字,"*"表示前面...
在C#中使用正则表达式首先需要引入`System.Text.RegularExpressions`命名空间,然后通过`Regex`类的各种方法来实现具体的文本处理功能。 #### 四、Regex类常用方法 1. **静态Match方法**:用于获取输入字符串中第...
- **分组与引用**:使用括号`()`创建分组,可以通过`\数字`引用前面的分组。 - **选择与否定**:`|`表示或操作,`[^字符集]`表示否定字符集,匹配不在集合内的字符。 通过熟练掌握这些基本概念和`regex101`工具的...
在Linux操作系统中,C语言编程时常常需要处理字符串匹配和模式查找的问题,这时POSIX(Portable Operating System Interface)正则表达式库就显得尤为重要。POSIX正则表达式是符合IEEE Std 1003.1标准的一套规则,它...
1. **创建正则表达式对象**:通常,我们需要先创建一个 `Regex` 对象,传入一个表示正则模式的字符串。例如: ```csharp Regex regex = new Regex(@"\d{3}-\d{2}-\d{4}"); ``` 这个正则模式匹配格式为 "XXX-XX-...
在C语言中,实现正则表达式功能通常需要借助第三方库,比如本案例中提到的Henry Spencer的regex library。这个库提供了在C语言环境中使用正则表达式的功能,具有高度可移植性和简洁的API。 **1. Henry Spencer的...
为提高效率,通常会封装一些类库来实现这些功能。这些类库简化了代码编写,使开发者能够更加专注于业务逻辑。以下是对标题和描述中提及的几个关键类库的详细介绍: 1. **字符串操作类**:这类库提供了丰富的字符串...
1. **正则表达式构造**:创建一个`std::regex`对象,需要提供一个字符串作为正则表达式模式。例如,`std::regex pattern("^[a-zA-Z]+$");`表示只匹配由字母组成的字符串。 2. **匹配操作**: - `std::regex_match`...
用JAVA写的一个将正则表达式转换为NFA的代码,基于Thompson算法的思想,递归构建NFA。jar为源码文件。 输出非确定有限自动状态机的有向图。如正则表达式: c(a|b)NFA为:0-c->1-ep->2-a->3-ep->7 ,0-c->1-ep->4-b->5-...
在使用Boost Regex库时,首先需要包含相应的头文件`<boost/regex.hpp>`,然后可以使用命名空间`boost`下的类和函数。库中的`boost::regex`类是核心,它代表正则表达式的类型,可以用来编译正则表达式并进行匹配。`...
而在Windows系统中,可以使用Microsoft特定的`<regex>`库,它基于C++标准模板库(STL),提供了`std::regex`类和相关的成员函数。 **1. POSIX与C++标准库的regex** 在Linux下,我们习惯于使用POSIX的regex函数,如...
在C++中,`std::regex`是一个基本的正则表达式对象,你可以通过构造函数传递一个字符串来创建它,该字符串表示你要匹配的模式。例如,如果你想匹配所有数字,可以这样做: ```cpp std::regex numberRegex("\\d+"); ...
RegexTester是一款功能强大的正则表达式测试和替换工具,它为用户提供了一个实时转换环境,方便进行正则表达式的验证、调试以及数据处理。这款软件在IT行业中被广泛使用,尤其对于程序员和数据分析师来说,是必不可...
总的来说,这个库为Windows开发者提供了在C语言环境中使用POSIX正则表达式的能力,从而扩展了Windows编程的灵活性,使得开发者可以充分利用正则表达式的强大功能,进行文本处理、数据提取、输入验证等工作。...
- 预编译的正则表达式可以通过创建`Regex`对象时指定`RegexOptions.Compiled`选项实现。 4. **线程安全**: - `Regex`类是线程安全的,这意味着多线程环境下可以同时使用同一个`Regex`实例,不会出现数据竞争问题...
2. 编译与匹配:`regex++`库提供了编译正则表达式字符串为对象的功能,然后通过这个对象进行匹配操作。例如,`boost::regex re("pattern")`编译正则,`boost::regex_match(str, re)`检查字符串是否匹配。 三、`...
1. **编译模式**:使用 `std::regex` 构造函数将正则表达式模式编译为正则对象。 ```cpp std::regex reg("模式"); ``` 2. **匹配与迭代**:通过 `std::regex_match` 或 `std::regex_search` 进行全匹配或部分匹配...