高分 正则表达式

weiluo12 2009-12-24 03:00:13
有这样一类代码(方法)

{
conn = DBConnectionPool.getConnection();
//可以有代码
stmt = conn.prepareStatement("update t_base_company set name=?,remark=? " +
"where id=?");
stmt.setString(1, name);
stmt.setString(2, remark);
stmt.setShort(3, id);
stmt.execute();
//可以有代码
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBConnectionPool.closeStatementSafey(stmt);
DBConnectionPool.closeConnectionSafey(conn);
}

现在我想通过eclipse搜索(通过正则表达式的方式)包含getConnection和closeConnectionSafey。
请问这样的正则表达式这样写:关键是换行(不确定有多少行)、空格。这能这类代码中找,不能跨代码 (方法)

谢谢各位!!!
...全文
433 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
GSDN00A 2010-03-11
  • 打赏
  • 举报
回复
有趣,回贴到33楼。楼主在34的一声唤下,35楼把分全部接走了。
weiluo12 2010-03-10
  • 打赏
  • 举报
回复
谢谢各位带大侠!

快来接分了...
duchq044 2010-01-15
  • 打赏
  • 举报
回复
学习一下
huangwj20042008 2010-01-15
  • 打赏
  • 举报
回复
public static void method1(){
getConnection();
closeConnectionSafey();
}
public static void getConnection(){

}
public static void closeConnectionSafey(){

}
}
class PosName{
private int position;
private String name;

public PosName(int position,String name){
this.position = position;
this.name = name;
}

public int getPosition() {
return position;
}

public void setPosition(int position) {
this.position = position;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}
Tassdars 2010-01-15
  • 打赏
  • 举报
回复
顶,学习一下!
huangwj20042008 2010-01-15
  • 打赏
  • 举报
回复
public static String findSpecialText(List<String> fileList,String searchGet,String searchClose){
int fileNum = fileList.size();
String regex = "[a-zA-Z_$][a-zA-Z0-9_$]*(\\s*\\[\\s*\\])?\\s+[a-zA-Z_$][a-zA-Z0-9_$]*\\s*\\((\\s*[a-zA-Z_$][a-zA-Z0-9_$]*(\\s*\\[\\s*\\])?\\s+[a-zA-Z_$][a-zA-Z0-9_$]*(\\s*\\[\\s*\\])?\\s*|\\s*)\\)\\s*\\{";
Pattern pattern = Pattern.compile(regex,Pattern.DOTALL);
StringBuilder methodBuilder = new StringBuilder();
String splitLine = "--------------------";
for(int i=0;i<fileNum;i++){

String tempPath = fileList.get(i);
StringBuilder builder = new StringBuilder();
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(tempPath)));
byte[] buffer = new byte[1024];
int readNum = 0;


while((readNum = bis.read(buffer)) != -1){
builder.append(new String(buffer,0,readNum));
}
bis.close();
} catch (Exception e) {
e.printStackTrace();
}

String code = builder.toString();

Matcher matcher = pattern.matcher(code);
ArrayList<PosName> positionList = new ArrayList<PosName>();
while(matcher.find()){
int start = matcher.start();
int end = matcher.end();
String name = code.substring(start,end);
int tempIndex = name.indexOf('{');
name = name.substring(0,tempIndex);
positionList.add(new PosName(start,name));
}
int len = positionList.size();


String methodText = null;
int getIndex = 0;
int closeIndex = 0;
boolean appendFileName = false;
if(len>0){
for(int j=0;j<len-1;j++){
PosName curPosName = positionList.get(j);
PosName nextPosName = positionList.get(j+1);
int curPos = curPosName.getPosition();
int nextPos = nextPosName.getPosition();
methodText = code.substring(curPos,nextPos);
int tempIndex = methodText.lastIndexOf('}');
methodText = methodText.substring(0,tempIndex+1);
getIndex = methodText.indexOf(searchGet);
closeIndex = methodText.indexOf(searchClose);
if(getIndex>=0 && closeIndex>=0){
if(!appendFileName){
methodBuilder.append(splitLine+tempPath+splitLine+"\n");
appendFileName = true;
}
methodBuilder.append(curPosName.getName()+"\n");
}

}
PosName lastPosName = positionList.get(len-1);
methodText = code.substring(lastPosName.getPosition());
methodText = methodText.substring(0,methodText.lastIndexOf('}'));
getIndex = methodText.indexOf(searchGet);
closeIndex = methodText.indexOf(searchClose);
if(getIndex>=0 && closeIndex>=0){
if(!appendFileName){
methodBuilder.append(splitLine+tempPath+splitLine+"\n");
appendFileName = true;
}
methodBuilder.append(lastPosName.getName()+"\n");
}
}
}
return methodBuilder.toString();
}
huangwj20042008 2010-01-15
  • 打赏
  • 举报
回复
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UseReflectFind {
public void method2(){
Method[] methods;
System.out.println();
}
public static void main(String[] args){

getConnection();
closeConnectionSafey();
List<String> fileList = iterateDir("D:\\hwj\\work\\workspace\\Test\\src");
System.out.println("file number is:"+fileList.size());
String searchGet = "getConnection";
String searchClose = "closeConnectionSafey";
System.out.println("such methods contain :\n"+findSpecialText(fileList,searchGet,searchClose));


}
public static List<String> iterateDir(String srcDir){
File srcFile = new File(srcDir);
File[] files = srcFile.listFiles();
ArrayList<String> pathList = new ArrayList<String>();
for(int i=0;i<files.length;i++){
File tempFile = files[i];
if(tempFile.isDirectory()){
pathList.addAll(iterateDir(tempFile.getAbsolutePath()));
}else{
pathList.add(tempFile.getAbsolutePath());
}
}
return pathList;
}
huangwj20042008 2010-01-15
  • 打赏
  • 举报
回复
不支持构造函数,如果构造函数含有这种代码,则寻找不到。
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UseReflectFind {
public void method2(){
Method[] methods;
System.out.println();
}
public static void main(String[] args){

getConnection();
closeConnectionSafey();
List<String> fileList = iterateDir("D:\\hwj\\work\\workspace\\Test\\src");
System.out.println("file number is:"+fileList.size());
String searchGet = "getConnection";
String searchClose = "closeConnectionSafey";
System.out.println("such methods contain :\n"+findSpecialText(fileList,searchGet,searchClose));


}
public static List<String> iterateDir(String srcDir){
File srcFile = new File(srcDir);
File[] files = srcFile.listFiles();
ArrayList<String> pathList = new ArrayList<String>();
for(int i=0;i<files.length;i++){
File tempFile = files[i];
if(tempFile.isDirectory()){
pathList.addAll(iterateDir(tempFile.getAbsolutePath()));
}else{
pathList.add(tempFile.getAbsolutePath());
}
}
return pathList;
}
weiluo12 2010-01-14
  • 打赏
  • 举报
回复
... ...
fhuibo212 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 xiezhifu 的回复:]
或者楼主的意思是下面的这样子?
先定位代码块的起始位置“{”,然后分别查找getConnection或closeConnectionSafey这两个字段,如果先找到的是getConnection字段,那下一个查找就找closeConnectionSafey字段;如果是先找到closeConnectionSafey字段,那下一个就查找getConnection字段。如果碰到代码块结束符“}”或者碰到代码块起始符“{”则重新初始化查找进行下一个代码块查找,如果没有碰到代码块结束符“}”或者没有碰到代码块起始符“{”并且同时找到这两个字段,那就进行处理。
如果楼主的意思是上面的这两种意思,可以按照思路进行设计查找方法了
[/Quote]

如果第二个字段是在finally{}里??
laker_914 2010-01-14
  • 打赏
  • 举报
回复
想都不敢想,呵呵
fhuibo212 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cantona1994 的回复:]
LZ的头像是亮点
[/Quote]
你的头像也挺靓
fhuibo212 2010-01-14
  • 打赏
  • 举报
回复
没碰过这样的问题,值得研究~
wekui 2009-12-26
  • 打赏
  • 举报
回复
up
xiezhifu 2009-12-26
  • 打赏
  • 举报
回复
或者楼主的意思是下面的这样子?
先定位代码块的起始位置“{”,然后分别查找getConnection或closeConnectionSafey这两个字段,如果先找到的是getConnection字段,那下一个查找就找closeConnectionSafey字段;如果是先找到closeConnectionSafey字段,那下一个就查找getConnection字段。如果碰到代码块结束符“}”或者碰到代码块起始符“{”则重新初始化查找进行下一个代码块查找,如果没有碰到代码块结束符“}”或者没有碰到代码块起始符“{”并且同时找到这两个字段,那就进行处理。
如果楼主的意思是上面的这两种意思,可以按照思路进行设计查找方法了
xiezhifu 2009-12-26
  • 打赏
  • 举报
回复
先定位代码块的起始位置“{”,然后分别查找getConnection或closeConnectionSafey这两个字段,如果先找到的是getConnection字段,那下一个查找就找closeConnectionSafey字段;如果是先找到closeConnectionSafey字段,那下一个就查找getConnection字段。如果碰到代码块结束符“}”则重新初始化查找进行下一个代码块查找,如果没有碰到代码块结束符“}”并且同时找到这两个字段,那就进行处理。
不知道楼主的意思是不是这样?
bobo415 2009-12-26
  • 打赏
  • 举报
回复
没有见过
牛叔 2009-12-25
  • 打赏
  • 举报
回复
还是么搞懂
。。。。
py330316117 2009-12-25
  • 打赏
  • 举报
回复
lz是想说用正则表达式作为条件然后在数据库中进行查询?
  • 打赏
  • 举报
回复
祝福下
加载更多回复(15)
该 Web 应用程序是与 KeePass 数据库兼容的浏览器和桌面密码管理器。 它不需要任何服务器或其他资源。 该应用程序可以在浏览器中运行,也可以作为桌面应用程序运行。KeeWeb 为您提供了一个免费的跨平台密码管理器,其中包括与 KeePass 的完全兼容性。 开源免费跨平台密码管理软件 KeeWeb 中文版开源免费跨平台密码管理软件 KeeWeb 中文版 KeeWeb 特色 适用于所有平台的桌面应用程序:在每个平台上,桌面应用程序看起来都很漂亮:macOS,Windows和Linux。您可以在桌面应用程序中打开本地文件。 主题:在深色和浅色主题之间切换,以您更喜欢的为准。 颜色收藏夹:使用颜色标记项目,并使用“颜色”选项卡轻松找到它们。 多文件支持:打开多个文件,搜索任何条目或将所有文件中的所有项目作为一个列表查看。 一键搜索所有文件:搜索适用于所有文件,所有操作均在一个搜索框中完成。 Dropbox 同步:打开 Dropbox 中的文件,自动跨设备同步更改。 简易标签输入:添加标签以安排条目。在列表中快速选择它们或添加新的。 拖放:将条目附件和数据库文件直接拖放到应用程序中。 受保护的字段:可以在需要时将其隐藏。而且它们将以比普通字段更安全的方式存储在内存中。 密码生成器:生成任意长度的密码,仅包含所需的符号。 脱机访问:保存文件以供脱机使用,即使是从 Dropbox 打开的文件也是如此。您始终可以访问离线版本,更改将在您再次在线时自动同步。 快捷方式:使用快捷方式可以更快地访问操作。 高级搜索选项:通过指定字段,搜索密码,历史记录并使用强大的正则表达式语法来优化搜索。 历史记录:您所做的所有更改都会记录到历史记录中。您可以回滚到任何状态或完全删除该状态。 条目图标:从预定义的高分辨率图标集中选择一个图标,下载网站图标或使用您自己的图标。 表格视图:在列表和表格布局之间切换。 嵌入式图像查看器:将图像附加到条目上,然后单击以查看。 开源:该应用程序是完全免费的:没有试用版,没有演示版本,没有限制。甚至更多:您始终可以自己从资源中构建它。源代码可在 GitHub 上获得。 您可以轻松地从具有时尚,直观界面的安全数据库中存储所有密码。只需单击即可完成所有操作。如上所述,KeeWeb 与 KeePass 兼容,利用 .KDBX 格式存储密码。这个事实允许打开 .KDBX 文件以及在本地存储它们,或者您可以将其与 Dropbox,Google Drive,OneDrive 等各种 Cloud 服务同步。 KeeWeb 包括用于密码组织的选项,例如用于特定类型密码的组,以方便参考和检索。 KeeWeb 提供了全部功能,包括自动高级搜索选项,剪贴板清除,自动锁定,附件支持,字段保护,快捷方式,密码生成器以及设置密码有效期的功能。它还结合了一种查看更改历史记录的方式,并具有回滚到任何状态或完全删除状态的附加好处。
Total Commander Chinese (Simplified) Enhanced Edition Release Notes ================================================================================= Total Commander 中文增强版 版本说明 软件名称:Total Commander 软件版本:9.21a 64位正式版 官方网站:http://www.ghisler.com 定制作者:飞扬时空 定制版本:5.14.1 个人主页:http://flyonzone.ys168.com 更新日期:2018年9月15日 第一节 软件简介 Total Commander 是一款著名的文件管理软件,其功能类似于资源管理器。它具有两个并 排的文件窗口,方便用户对文件及文件夹进行复制、移动、删除等操作和管理。 Total Commander 的特色功能: - 并排双窗口设计:处理不同位置文件更方便高效; - 支持文件夹标签:方便用户快速切换多个文件夹; - 内置文件查看器:可快速查看多种类型文件内容; - 丰富的插件资源:极大地拓展和增强了软件功能; - 批量重命名工具:支持多种命名规则,功能强大; - 文件夹同步工具:可比较并同步不同文件夹内容; - 文件间内容比较:可比较并修改文件间内容差异; - 增强的搜索功能:可按指定条件搜索文件及内容; - 文件传输客户端:支持多组服务器上传下载文件; - 文件压缩与解压:支持处理常见的压缩文件格式; - 文件分割与合并:可按要求分割文件及合并文件; - 文件编码与解码:支持多种格式文件编码及解码; - 文件过滤与定位:可快速定位到符合条件的文件; - 支持命令行操作:支持带参数启动各种应用程序; - 常用文件夹列表:方便快速访问常用系统文件夹; - 文件夹历史列表:方便快速访问浏览过的文件夹; - 高度的可配置性:可自定义工具栏和菜单等资源; - 支持键盘快捷键:可通过快捷键调用大多数功能; - 支持多国语言及 Unicode:消除语言文字的鸿沟; - 支持长文件名:文件名长度最多可达 1022 字符; - 支持通配符及正则表达式:搜索及重命名更方便; - 其他功能有待您发掘…… Total Commander 9.x 系列版本新增特色功能: - 新增视图模式:可通过手动或按指定规则自动切换; - 新增垂直工具栏:方便用户点击图标访问更多功能; - 可集成 Everything :此工具可提高文件搜索效率; - 支持橡皮筯选择(框选)模式:选择文件更加方便; - 新增新式风格主菜单及工具栏图标,并可随时切换; - 更好地支持高分辨率及多显示器间不同分辨率显示; - 新增自动检查更新功能; - 其它功能改进和增强…… 我确信,Total Commander 是一款非常优秀的文件管理软件,它能给您带来更多便利,值 得我们深入了解并长期使用! 第二节 版本特色 相对于官方版本而言,本定制版本具有如下鲜明特色: - 完美中文版:集成中文版文档及插件,支持拼音首字母定位等功能; - 功能更强大:集成精选插件和实用工具,软件功能得以丰富和增强; - 使用更方便:精心定制菜单、工具栏、文件夹列表、快捷键等资源; - 界面更美观:精选图标、字体、颜色、尺寸等要素,视觉效果更佳; - 安装更灵活:可选择多种安装类型,充分满足个性化、多样化需求。 第三节 定制内容 一、精心定制资源 1、中文菜单文件:精心定制菜单项目,内容更完整、调用更方便; 2、中文帮助文件:方便用户随时查阅,更好地理解和使用本软件; 3、图标及工具栏:集成三种图标方案,并添加系统资源等工具栏; 4、汉化插件资源:简体中文界面,用户使用更方便、体验更自然; 5、常用文件夹菜单:通过该菜单可快速跳转到常用的系统文件夹; 6、完善快捷键设置:通过使用快捷键,用户可快速调用相应功能; 7、预置外部命令:较丰富的外部命令,方便用户自行调用和设置; 8、说明文档:制作版本

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧