今天在工作中,遇到这样的情况。首先给你一个SQL语句,比如:
select * from tableA union select * from tableB
要根据关键字把两个查询语句分解出来,即得到
select * from tableA 和 select * from tableB
一般的做法是:
String sql="select * from tableA union select * from tableB";
if(sql.toLowerCase().indexOf(" union ")>-1){
String sql2[]=sql.split(" union ");
for(int i=0;i<sql2.length;i++){
System.out.println(sql2[i]);
}
}
但因为这个是SQL语句,union关键字不区分大小写的,所有sql语句有这些情况:
select * from tableA UNION select * from tableB
select * from tableA UnIOn select * from tableB
select * from tableA UNiON select * from tableB
……
所以单单用这样的语句:String sql2[]=sql.split(" union ");
是分解不出子语句的。
这里的碰到了特殊情况,我不知道别人是怎么做的,我的思路是应该有种机制sql.split(不区分大小写);
String类没提供该方法,于是我觉得先看看SUN的源码,了解它的源码
是怎么处理的,找到了:
public int indexOf(String str) {
return indexOf(str, 0);
}
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
它运用的不过是正则表达式而已,幸好这几天对正则表达式有所研究。
看看正则表达式:
DEELX 正则表达式匹配模式
IGNORECASE
-------------------------
所以我们把
String sql2[]=sql.split(" union ");
修改为
String sql2[]=sql.split(" (?i)union ");
问题即可迎刃而解。
完整的:
String sql="select * from tableA union select * from tableB";
if(sql.toLowerCase().indexOf(" union ")>-1){
String sql2[]=sql.split(" (?i)union ");
for(int i=0;i<sql2.length;i++){
System.out.println(sql2[i]);
}
}
打印结果:
select * from tableA
select * from tableB
-------------------------
re: String split方法在忽略参数大小的情况下取得String[]的小技巧[未登录] 2008-05-27 02:59 | 李敏
String sql = "select * from tableA UNION select * from tableB"
.replaceFirst("UNION", "union");
if (sql.indexOf(" union ") > -1) {
String sql2[] = sql.split(" union ");
for (int i = 0; i < sql2.length; i++) {
System.out.println(sql2[i]);
}
}
既然是无法区分大小写,不如一开始就替换掉!
分享到:
相关推荐
本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧。分享给大家供大家参考。具体分析如下: 先来看看如下代码: string = ''' the stirng Has many line In THE fIle jb51 net ''' list...
在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧。以下我就为大家介绍,需要的朋友可以参考下
Javascript小技巧一箩筐 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode ...
Visual Web Development 2005开发ASP.NET使用小技巧 ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的...
17.3.4 split()方法 17.4 获取控制——元字符 17.4.1 点元字符 17.4.2 字符类 17.4.3 元符号 17.4.4 重复模式匹配元字符 17.4.5 锚元字符 17.4.6 或模式 17.5 用正则...
8.1.3 格式化输出数据:ext.string、ext.number、ext.date和ext.util.format / 389 8.1.4 超级模板:ext.xtemplate(包括ext.xtemplateparser和ext.xtemplatecompiler) / 393 8.1.5 模板的方法 / 396 8.2 组件...
在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl...
2.3.2 内核参数选项 8 2.3.3 安装程序 9 2.3.4 选择一种安装方法 9 2.3.5 光盘安装 10 2.4 硬件配置 14 2.4.1 选择鼠标 14 2.4.2 配置X Window系统 14 2.4.3 配置网络 14 2.4.4 设置时区 15 2.4.5 选择服务自动启动 ...
在过去的几年中,我一直在John Ousterhout的手下工作,最初是在Sun微系统公司,而现在是在Scriptics公司。我一直使自己在很大程度上保持着一个Tcl程序员的角色,而我们工作组中的其他人员则埋头于Tcl本身的C语言实现...